diff --git a/inst/htmlwidgets/js/src/dist/cjs/index.js.map b/inst/htmlwidgets/js/src/dist/cjs/index.js.map
index 8fabd30e..4ffca7e0 100644
--- a/inst/htmlwidgets/js/src/dist/cjs/index.js.map
+++ b/inst/htmlwidgets/js/src/dist/cjs/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sources":["../../node_modules/core-js/index.js","../../node_modules/regenerator-runtime/runtime.js","../../scripts/config.js","../../scripts/utils.js","../../scripts/layout.js","../../scripts/custom-animations.js","../../scripts/hack-facet-view.js","../../scripts/app.js"],"sourcesContent":["module.exports = require('./features');\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","export const CONF = {\n X_FIELD: \"datamations_x\",\n Y_FIELD: \"datamations_y\",\n ORDER_FIELD: \"datamations_order\",\n SCHEME: \"https://vega.github.io/schema/vega-lite/v4.json\",\n};\n\nexport const IGNORE_FIELDS = [\n 'tooltip', 'x', 'y',\n 'datamations_x', 'datamations_y'\n];\n\nexport const META_PARSE_VALUES = {\n grid: \"grid\",\n jitter: \"jitter\",\n};","import { IGNORE_FIELDS } from \"./config\";\n\n/**\n * Gets selectors for each componenent, such as slider and animation divs\n * @param {String} id root container id where all the animation components are rendered\n * @returns object of selectors\n */\nexport function getSelectors(id) {\n const base = \"#\" + id;\n\n return {\n axisSelector: base + \" .vega-for-axis\",\n visSelector: base + \" .vega-vis\",\n descr: base + \" .description\",\n slider: base + \" .slider\",\n otherLayers: base + \" .vega-other-layers\",\n controls: base + \" .controls-wrapper\",\n exportWrap: base + \" .export-wrapper\",\n exportBtn: base + \" .export-btn\",\n replayBtn: base + \" .replay-btn\",\n };\n}\n\n/**\n * Splits layers into separate vega-lite specifications, removes layer field\n * @param {Object} input vega-lite specification with layers\n * @returns a list of specs\n */\nexport function splitLayers(input) {\n const specArray = [];\n const spec = input.spec;\n\n if (spec && spec.layer) {\n spec.layer.forEach((d, i) => {\n const obj = JSON.parse(JSON.stringify(input));\n const animated = i === spec.layer.length - 1;\n\n if (obj.meta) {\n obj.meta.animated = animated;\n } else {\n obj.meta = { animated };\n }\n\n obj.spec.encoding = d.encoding;\n obj.spec.mark = d.mark;\n delete obj.spec.layer;\n specArray.push(obj);\n });\n } else if (input.layer) {\n input.layer.forEach((d, i) => {\n const obj = JSON.parse(JSON.stringify(input));\n const animated = i === input.layer.length - 1;\n\n if (obj.meta) {\n obj.meta.animated = animated;\n } else {\n obj.meta = { animated };\n }\n\n obj.encoding = d.encoding;\n obj.mark = d.mark;\n delete obj.layer;\n specArray.push(obj);\n });\n }\n\n return specArray;\n}\n\n/**\n * Looks up a word based of buckets and value.\n * Example:\n * - words: ['a', 'b', 'c']\n * - buckets: [10, 20, 30]\n * - value: 25\n * will return 'c'\n * @param {Array} words list of words\n * @param {Array} buckets list of numbers\n * @param {Number} value score to lookup\n */\nexport function lookupByBucket(words, buckets, value) {\n return words[buckets.findIndex((d) => value <= d)];\n}\n\n/**\n * Finds correct number of rows for grid based on biggest group\n * @param {Array} vegaLiteSpecs an array of vega lite specs\n * @returns a number of rows\n */\nexport function getRows(vegaLiteSpecs) {\n let maxRows = 0;\n\n vegaLiteSpecs\n .filter((d) => d.meta.parse === \"grid\")\n .forEach((spec) => {\n let { width: specWidth, height: specHeight } = spec.spec || spec;\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const splitField = spec.meta.splitField;\n const groupKeys = [];\n\n if (spec.facet) {\n if (spec.facet.column) {\n groupKeys.push(spec.facet.column.field);\n }\n if (spec.facet.row) {\n groupKeys.push(spec.facet.row.field);\n }\n }\n\n let specValues = spec.data.values;\n\n const gap = 2;\n const distance = 4 + gap;\n\n let secondarySplit = Object.keys(encoding).filter((d) => {\n const field = encoding[d].field;\n return (\n field !== splitField &&\n IGNORE_FIELDS.indexOf(d) === -1 &&\n groupKeys.indexOf(field) === -1\n );\n })[0];\n\n // combine groups if secondarySplit\n if (splitField && secondarySplit) {\n const secondaryField = encoding[secondarySplit].field;\n const keys = [...groupKeys, splitField];\n\n const grouped = d3.rollups(\n specValues,\n (arr) => {\n const obj = {};\n let sum = 0;\n\n arr.forEach((x) => {\n sum += x.n;\n obj[x[secondaryField]] = sum;\n });\n\n const o = {\n [splitField]: arr[0][splitField],\n [secondaryField]: obj,\n n: sum,\n };\n\n groupKeys.forEach((x) => {\n o[x] = arr[0][x];\n });\n\n return o;\n },\n ...keys.map((key) => {\n return (d) => d[key];\n })\n );\n\n specValues = grouped.flatMap((d) => {\n if (keys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n\n specWidth = specWidth / grouped.length;\n }\n\n const maxN = d3.max(specValues, (d) => d.n);\n\n let rows = Math.ceil(Math.sqrt(maxN));\n let maxCols = Math.ceil(maxN / rows);\n\n // if horizontal gap is less than 5,\n // then take up all vertical space to increase rows and reduce columns\n if (specWidth / maxCols < 5) {\n rows = Math.floor(specHeight / distance);\n }\n\n if (rows > maxRows) {\n maxRows = rows;\n }\n });\n\n return maxRows;\n}\n","/*\n* Layout generation functions for datamations.\n* Supports:\n* - grid view: meta.parse = \"grid\"\n* - jittered view: meta.parse = \"jitter\"\n*/\nimport { CONF, IGNORE_FIELDS } from \"./config\";\nimport { lookupByBucket } from \"./utils\";\n\n/**\n * Generates data for grid specs\n * @param {Object} spec vega-lite spec\n * @param {Number} rows number of rows\n * @param {Boolean} stacked if true, circles are stacked and vertically aliged\n * @returns an array of objects\n */\nexport function generateGrid(spec, rows = 10, stacked = false) {\n const splitField = spec.meta.splitField;\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const groupKeys = [];\n\n let {width: specWidth} = spec.spec || spec;\n\n if (spec.facet) {\n if (spec.facet.column) {\n groupKeys.push(spec.facet.column.field);\n spec.facet.column.sort = { \"field\": CONF.ORDER_FIELD };\n }\n if (spec.facet.row) {\n groupKeys.push(spec.facet.row.field);\n spec.facet.row.sort = { \"field\": CONF.ORDER_FIELD };\n }\n }\n\n let specValues = spec.data.values;\n\n const metas = [];\n\n specValues.forEach((d, i) => {\n d[CONF.ORDER_FIELD] = i;\n if (d.meta) {\n metas.push(...Object.keys(d.meta));\n }\n });\n\n let secondarySplit = Object.keys(encoding).filter(d => {\n const field = encoding[d].field;\n return field !== splitField &&\n IGNORE_FIELDS.indexOf(d) === -1 &&\n groupKeys.indexOf(field) === -1 &&\n metas.indexOf(field) === -1;\n })[0];\n\n let secondaryField = null;\n\n // combine groups\n // for example, if splitField = player, but color = hit:\n\n // { \"n\": 5, \"player\": \"a\", \"hit\": \"yes\" },\n // { \"n\": 10, \"player\": \"a\", \"hit\": \"no\" },\n // { \"n\": 15, \"player\": \"b\", \"hit\": \"yes\" },\n // { \"n\": 35, \"player\": \"b\", \"hit\": \"no\" }\n\n // after this code block we will get:\n // { \"n\": 15, \"player\": \"a\", \"hit\": { \"yes\": 5, \"no\": 10 } },\n // { \"n\": 50, \"player\": \"b\", \"hit\": { \"yes\": 15, \"no\": 35 } },\n\n if (splitField && secondarySplit) {\n secondaryField = encoding[secondarySplit].field;\n const keys = [...groupKeys, splitField];\n\n const grouped = d3.rollups(\n specValues,\n arr => {\n const obj = {};\n let sum = 0;\n\n arr.forEach(x => {\n sum += x.n;\n obj[x[secondaryField]] = sum;\n });\n\n const o = {\n [splitField]: arr[0][splitField],\n [secondaryField]: obj,\n n: sum,\n };\n\n groupKeys.forEach(x => {\n o[x] = arr[0][x];\n });\n\n return o;\n },\n ...keys.map((key) => {\n return (d) => d[key];\n })\n );\n\n specValues = grouped.flatMap((d) => {\n if (keys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n\n specWidth = specWidth / grouped.length;\n }\n\n let maxCols = Math.ceil(d3.max(specValues, d => d.n) / rows);\n let splitOptions = [];\n\n if (splitField) {\n splitOptions = Array.from(\n new Set(specValues.map((d) => d[splitField]))\n )\n }\n\n let counter = 1;\n\n const reduce = (v) => {\n const arr = [];\n\n v.forEach((d, j) => {\n const n = d.n;\n const columns = Math.ceil(n / rows);\n const xCenter = splitField ? splitOptions.indexOf(d[splitField]) + 1 : 1;\n\n let startCol = (xCenter - 1) * maxCols + j; // inner grid start\n startCol += Math.floor((maxCols - columns) / 2); // center alignment\n\n const datum = {};\n\n // remove n and gemini_ids, we won't need them any more\n Object.keys(d).forEach(k => {\n if (k !== 'n' && k !== 'gemini_ids') {\n datum[k] = d[k];\n }\n });\n\n for (let i = 0; i < n; i++) {\n const x = startCol + Math.floor(i / rows);\n const y = rows - 1 - i % rows;\n const colorFieldObj = {};\n\n // for secondary split, e.g. is_hit, find correct key and value\n if (secondaryField && typeof[d[secondaryField]] === \"object\") {\n const keys = Object.keys(d[secondaryField]).sort((a, b) => {\n return d[secondaryField][a] - d[secondaryField][b];\n });\n\n colorFieldObj[secondaryField] = lookupByBucket(\n keys,\n keys.map(k => d[secondaryField][k]),\n i + 1,\n );\n }\n\n arr.push({\n ...datum,\n ...colorFieldObj,\n gemini_id: d.gemini_ids ? d.gemini_ids[i] : counter,\n [CONF.X_FIELD]: stacked ? xCenter : x,\n [CONF.Y_FIELD]: stacked ? i + 1 : y,\n });\n\n counter++;\n }\n });\n\n return arr;\n };\n\n let gridValues = [];\n\n if (groupKeys.length === 0) {\n gridValues = reduce(specValues);\n } else {\n gridValues = d3.rollups(\n specValues,\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n )\n .flatMap((d) => {\n if (groupKeys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n }\n\n const num_groups = splitOptions.length;\n\n return {\n gridValues,\n domain: [\n -maxCols / 2,\n (num_groups * maxCols) + (num_groups - 1) + maxCols / 2 - 1\n ],\n num_groups\n };\n}\n\n/**\n * Generates infogrid specification\n * @param {Object} spec vega-lite specification\n * @param {Number} rows number of rows in a grid\n * @returns grid specification\n */\nexport function getGridSpec(spec, rows = 10, stacked = false) {\n return new Promise((res) => {\n const { gridValues: grid, domain, num_groups } = generateGrid(spec, rows, stacked);\n const obj = {...spec};\n const encoding = obj.spec ? obj.spec.encoding : obj.encoding;\n\n const dx = stacked ? 1 : 1;\n\n const xDomain = stacked || num_groups === 0 ? [\n d3.min(grid, d => d[CONF.X_FIELD]) - dx,\n d3.max(grid, d => d[CONF.X_FIELD]) + dx\n ] : domain;\n\n const yPadding = (spec.facet && spec.facet.row) ? 0.8 : 0.4;\n\n const yDomain = [\n stacked ? 0 : d3.min(grid, (d) => d[CONF.Y_FIELD]) - yPadding,\n d3.max(grid, (d) => d[CONF.Y_FIELD]) + yPadding + (stacked ? 10 : 0),\n ];\n\n const middle = yDomain[0] + (yDomain[1] - yDomain[0]) / 2;\n\n obj.data.values = grid;\n\n encoding.x.scale = {\n type: \"linear\",\n domain: xDomain,\n };\n\n encoding.y.scale = {\n type: \"linear\",\n domain: [\n Math.min(yDomain[0], middle - rows / 2),\n Math.max(yDomain[1], middle + rows / 2)\n ],\n };\n\n encoding.x.field = CONF.X_FIELD;\n encoding.y.field = CONF.Y_FIELD;\n\n // set axis labels when splitField\n if (spec.meta.splitField) {\n const labels = Array.from(\n new Set(grid.map(d => d[spec.meta.splitField]))\n );\n\n const expr = {};\n\n labels.forEach((d) => {\n // find min and max x values for each label\n const extent = d3.extent(\n spec.data.values.filter(x => x[spec.meta.splitField] === d),\n d => d[CONF.X_FIELD],\n );\n\n const middle = Math.ceil(extent[0] + (extent[1] - extent[0]) / 2);\n expr[middle] = d;\n });\n\n spec.meta.rules = obj.meta.rules = labels.map(m => {\n return {\n filter: `datum['${spec.meta.splitField}'] === '${m}'`,\n groupKey: spec.meta.splitField,\n groupValue: m,\n }\n });\n\n encoding.x.axis = {\n labelExpr: `${JSON.stringify(expr)}[datum.label]`,\n values: Object.keys(expr).map(d => +d),\n labelAngle: -90,\n grid: false,\n title: spec.meta.splitField,\n };\n }\n\n return res(obj);\n });\n}\n\n/**\n * Generates jittered specification using d3-force\n * @param {Object} spec vega-lite specification\n * @returns jittered spec\n */\nexport function getJitterSpec(spec) {\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const width = spec.spec ? spec.spec.width : spec.width;\n const nodes = spec.data.values;\n\n const circleRadius = 4;\n\n let innerGroupCount = 1;\n\n if (spec.meta.splitField) {\n innerGroupCount = new Set(\n nodes.map(d => d[spec.meta.splitField])\n ).size;\n }\n\n const facetSize = width ? width : 150;\n const yExtent = d3.extent(nodes, d => d[CONF.Y_FIELD]);\n const xScale = d3.scaleBand()\n .domain(d3.range(1, innerGroupCount + 1))\n .range([0, facetSize])\n .paddingOuter(0.5);\n\n const arr = nodes.slice().filter(d => d[CONF.Y_FIELD] !== undefined).map((d, i) => {\n d.oldX = d[CONF.X_FIELD];\n d.oldY = d[CONF.Y_FIELD];\n\n let x = xScale(d[CONF.X_FIELD]) + xScale.bandwidth() / 2;\n let y = d[CONF.Y_FIELD];\n\n d.scaledX = Math.round(x);\n\n return {\n ...d,\n x: x,\n y: y,\n };\n });\n\n const simulation = d3\n .forceSimulation(arr)\n .force(\"x\", d3.forceX().x(d => d.x))\n .force(\"y\", d3.forceY().strength(0.002).y(d => d[CONF.Y_FIELD]))\n .force(\"collide\", d3\n .forceCollide()\n .strength(0.01)\n .radius(circleRadius)\n )\n .stop();\n\n return new Promise((res) => {\n const bandwidth = xScale.bandwidth() * 0.9;\n\n for (let i = 0; i < 120; i++) {\n simulation.tick();\n\n arr.forEach(d => {\n const x = xScale(d.oldX);\n d.y = d.oldY;\n \n // restrict to the bounds: [5%, 95%] of width\n d.x = Math.max(\n x + xScale.bandwidth() * 0.05,\n Math.min(x + bandwidth, d.x),\n );\n })\n }\n\n if (encoding.y.scale) {\n encoding.y.scale.domain = yExtent\n } else {\n encoding.y.scale = {\n domain: yExtent\n }\n }\n\n encoding.x.scale = {\n domain: [0, facetSize]\n }\n\n // jitter still needs encoding fields to be x and y,\n // because d3-force uses x and y internally.\n encoding.x.field = \"x\";\n encoding.y.field = \"y\";\n\n // if meta.axes is falsy, and we have custom x-axis\n if (!spec.meta.axes && encoding.x.axis && spec.meta.xAxisLabels) {\n const labels = spec.meta.xAxisLabels;\n\n const axisExpr = {};\n const mapped = labels.map((d, i) => {\n const x = Math.round(xScale(i + 1) + xScale.bandwidth() / 2);\n axisExpr[x] = d;\n return { x, label: d };\n });\n\n encoding.x.axis.labelExpr = `${JSON.stringify(axisExpr)}[datum.label]`;\n encoding.x.axis.values = mapped.map(d => d.x);\n }\n\n return res({\n ...spec,\n data: {\n name: \"source\",\n values: arr,\n },\n });\n });\n}","/**\n * Custom animations generation script.\n * Supports:\n * - count\n * - median\n * - mean\n * - quantile\n * - min\n * - max\n * Inspiration from: https://giorgi-ghviniashvili.github.io/aggregate-animation-data/designs/\n */\n\nimport { CONF } from \"./config\";\nimport { getGridSpec } from \"./layout\";\n\n/**\n * Generates a spec for count animation\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {Object} shrink if truthy, circles will be pulled up\n * @returns a vega lite spec\n */\nexport const getCountStep = (source, target, shrink = false) => {\n const { width, height } = target.spec || target;\n let values = source.data.values.slice();\n const sourceMeta = source.meta;\n\n // generate rules layer\n const rules = sourceMeta.rules.map((d, i) => {\n const n = sourceMeta.rules.length;\n return {\n transform: [{ filter: d.filter }],\n name: `rule-${i + 1}`,\n mark: {\n type: \"rule\",\n x: { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: \"count\",\n // axis: null,\n },\n },\n };\n });\n\n if (shrink) {\n values = values.map((d, i) => {\n const y = target.data.values[i][CONF.Y_FIELD];\n return {\n ...d,\n [CONF.Y_FIELD]: y,\n };\n });\n }\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: source.encoding,\n },\n ...rules,\n ],\n };\n};\n\n/**\n * Generates a spec for median and quantile animations\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {Number} step step counter. null is the last step\n * @param {Number} p a percentile\n * @returns a vega lite spec\n */\nexport const getMedianStep = (source, target, step = 0, p = 0.5) => {\n const all_groups = [];\n const { width, height } = target.spec || target;\n const isLast = step === null;\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n const values = [];\n\n const reduce = (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n\n let sorted = data\n .slice()\n .sort((a, b) => {\n const sortFn = hasFacet ? \"descending\" : \"ascending\";\n return d3[sortFn](a[CONF.Y_FIELD], b[CONF.Y_FIELD]);\n })\n .map((d, i) => {\n return {\n ...d,\n rank: i + 1,\n };\n });\n\n // inspired by median animation https://uwdata.github.io/gemini2-editor/ \n const y_median = d3.quantile(sorted, p, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const y_median_pos = hasFacet ? data[0].scaleY(y_median) : y_median;\n const median_rank = d3.quantile(sorted, 0.5, (d) => d.rank);\n const max_rank = d3.max(sorted, (d) => d.rank);\n const diff = isLast ? null : max_rank - median_rank - step;\n const dx = hasFacet ? 5 : 0.1;\n\n sorted = sorted.map((d) => {\n const rank_delta_abs = Math.abs(d.rank - median_rank);\n const y_delta = (hasFacet ? d.oldY : d[CONF.Y_FIELD]) - y_median;\n const bisection =\n diff !== null && rank_delta_abs <= diff ? 0 : y_delta > 0 ? 1 : -1;\n\n let newField = null;\n\n if (bisection === -1) {\n newField = d[CONF.X_FIELD] - dx;\n } else if (bisection === 1) {\n newField = d[CONF.X_FIELD] + dx;\n } else {\n newField = d[CONF.X_FIELD];\n }\n\n return {\n ...d,\n bisection,\n [CONF.X_FIELD + \"_pos\"]: newField,\n y_median,\n y_median_pos,\n };\n });\n\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue} && datum.bisection === 0`;\n let groupFilter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupFilter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupFilter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupFilter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupFilter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n all_groups.push({\n filter,\n groupFilter,\n groupValue,\n groupKey: CONF.X_FIELD,\n median: y_median,\n groupId,\n median_pos: y_median_pos,\n rankDiff: Math.abs(max_rank - median_rank),\n rule_start: d3.min(sorted, (d) => d[CONF.X_FIELD + \"_pos\"]) + 1,\n rule_end: d3.max(sorted, (d) => d[CONF.X_FIELD + \"_pos\"]) - 1,\n });\n\n values.push(...sorted);\n };\n\n const groupKeys = [CONF.X_FIELD];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n d3.rollup(\n source.data.values.slice(),\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = [];\n\n let ruleField = isLast ? \"y_median\" : CONF.Y_FIELD;\n\n if (hasFacet) {\n ruleField = isLast ? \"y_median_pos\" : CONF.Y_FIELD;\n }\n\n all_groups.forEach((d, i) => {\n const n = all_groups.length;\n\n const top_rule = {\n transform: isLast ? [{ filter: d.groupFilter }] : [{ filter: d.filter }],\n name: `top_rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? d.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: ruleField,\n type: \"quantitative\",\n aggregate: \"max\",\n axis: null,\n },\n },\n };\n\n const bottom_rule = {\n transform: isLast ? [{ filter: d.groupFilter }] : [{ filter: d.filter }],\n name: `bottom_rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? d.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: ruleField,\n type: \"quantitative\",\n aggregate: \"min\",\n axis: null,\n },\n },\n };\n\n rules.push(top_rule, bottom_rule);\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n x: {\n ...source.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n color: source.encoding.color\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Generates a spec for mean animation\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @returns a vega lite spec\n */\nexport const getMeanStep = (source, target) => {\n const all_groups = [];\n const { width, height } = target.spec || target;\n const domain = source.encoding.y.scale.domain;\n\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n\n const values = [];\n\n const reduce = (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n\n let sorted = data\n .slice()\n .sort((a, b) => {\n const sortFn = hasFacet ? \"descending\" : \"ascending\";\n return d3[sortFn](a[CONF.Y_FIELD], b[CONF.Y_FIELD]);\n })\n .map((d, i) => {\n return {\n ...d,\n rank: i + 1,\n };\n });\n\n const y_mean = d3.mean(sorted, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const y_mean_pos = hasFacet ? data[0].scaleY(y_mean) : y_mean;\n const mean_rank = d3.mean(sorted, (d) => d.rank);\n const max_rank = d3.max(sorted, (d) => d.rank);\n const dividor = max_rank * 1.4;\n const multiplier = hasFacet ? 25 : 1;\n\n sorted = sorted.map((d) => {\n const rankRatio_from_mean = (d.rank - mean_rank) / dividor;\n\n const rankRatio_from_mean_start = (d.rank - 0.5 - mean_rank) / dividor;\n const rankRatio_from_mean_end = (d.rank + 0.5 - mean_rank) / dividor;\n\n return {\n ...d,\n [CONF.X_FIELD + \"_pos\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean * multiplier,\n [CONF.X_FIELD + \"_pos_start\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean_start * multiplier,\n [CONF.X_FIELD + \"_pos_end\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean_end * multiplier,\n y_mean,\n y_mean_pos,\n };\n });\n\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n all_groups.push({\n filter,\n groupValue,\n groupKey: CONF.X_FIELD,\n groupId: groupId,\n mean: y_mean,\n mean_pos: y_mean_pos,\n rule_start: d3.min(sorted, (d) => d[CONF.X_FIELD + \"_pos_start\"]),\n rule_end: d3.max(sorted, (d) => d[CONF.X_FIELD + \"_pos_end\"]),\n });\n\n values.push(...sorted);\n\n return sorted;\n };\n\n const groupKeys = [CONF.X_FIELD];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n d3.rollups(\n source.data.values.slice(),\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = [];\n\n all_groups.forEach((d, i) => {\n const n = all_groups.length;\n\n const rule = {\n transform: [{ filter: d.filter }],\n name: `rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : {\n expr: `${i + 1} * (width / ${n + 1}) - (width / ${n + 1}) * 0.35`,\n },\n x2: hasFacet\n ? d.rule_end\n : {\n expr: `${i + 1} * (width / ${n + 1}) + (width / ${n + 1}) * 0.35`,\n },\n },\n encoding: {\n y: {\n field: hasFacet ? \"y_mean_pos\" : CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: \"mean\",\n axis: null,\n scale: { domain },\n },\n },\n };\n\n rules.push(rule);\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n x: {\n ...source.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Generates a spec for min and max animations\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {String} minOrMax \"min\" or \"max\"\n * @returns a vega lite spec\n */\nexport const getMinMaxStep = (source, target, minOrMax = \"min\") => {\n const { width, height } = target.spec || target;\n const aggrFn = minOrMax === \"min\" ? d3.min : d3.max;\n const domain = source.encoding.y.scale.domain;\n const groupKeys = [CONF.X_FIELD];\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n\n const values = [];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n const all_groups = [];\n\n d3.rollup(\n source.data.values.slice(),\n (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n const aggr = aggrFn(data, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const aggr_pos = hasFacet ? data[0].scaleY(aggr) : aggr;\n\n all_groups.push({\n filter,\n groupValue,\n groupKey: CONF.X_FIELD,\n aggr,\n aggr_pos,\n groupId,\n rule_start: d3.min(data, (d) => d[CONF.X_FIELD] - 2),\n rule_end: d3.max(data, (d) => d[CONF.X_FIELD] + 2),\n });\n\n const g = data.find((d) => {\n const v = hasFacet ? d.oldY : d[CONF.Y_FIELD];\n return v === aggr;\n });\n\n values.push(\n ...data.map((d) => {\n const isAggr = g && g.gemini_id === d.gemini_id;\n\n return {\n ...d,\n isAggr,\n aggr_pos,\n };\n })\n );\n },\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = all_groups.map((group, i) => {\n const n = all_groups.length;\n return {\n transform: [{ filter: group.filter }],\n name: `rule_${group.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? group.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? group.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: hasFacet ? \"aggr_pos\" : CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: minOrMax,\n axis: null,\n scale: { domain },\n },\n },\n };\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values: values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Configuration for custom animations.\n * When meta.custom_animation is present, \n * it looks up a function here and generates custom animation specifications\n */\nexport const CustomAnimations = {\n /**\n * steps:\n * 1) stack sets\n * 2) put rules (lines) using aggregate count\n * 3) replace with count bubbles (aggregate count) (basically target spec)\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n count: async (rawSource, target) => {\n const stacks = await getGridSpec(rawSource, 10, true);\n delete stacks.encoding.y.axis;\n const rules = getCountStep(rawSource, target, false);\n const pullUp = getCountStep(rawSource, target, true);\n return [stacks, rules, pullUp, target];\n },\n /**\n * min animation steps:\n * 1) source spec\n * 2) stack sets, with a rule line at min circle\n * 3) pull circles down\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n min: (rawSource, target) => {\n const step_1 = getMinMaxStep(rawSource, target, \"min\");\n\n const step_2 = {\n ...step_1,\n transform: [{ filter: \"datum.isAggr === true\" }],\n layer: [\n {\n ...step_1.layer[0],\n encoding: {\n ...step_1.layer[0].encoding,\n y: {\n ...step_1.layer[0].encoding.y,\n aggregate: \"min\",\n },\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n\n return [rawSource, step_1, step_2, target];\n },\n /**\n * max animation steps:\n * 1) source spec\n * 2) stack sets, with a rule line at max circle\n * 3) pull circles up\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n max: (rawSource, target, source) => {\n const step_1 = getMinMaxStep(rawSource, target, \"max\");\n\n const step_2 = {\n ...step_1,\n transform: [{ filter: \"datum.isAggr === true\" }],\n layer: [\n {\n ...step_1.layer[0],\n encoding: {\n ...step_1.layer[0].encoding,\n y: {\n ...step_1.layer[0].encoding.y,\n aggregate: \"max\",\n },\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n\n return [rawSource, step_1, step_2, target];\n },\n /**\n * mean animation steps:\n * 1) source spec\n * 2) intermediate: circles will be placed diagonally \"/\" \n * 3) add lines (rules) at mean level\n * 4) convert circles to small ticks\n * 5) show vertical lines\n * 6) collapse the lines to mean level\n * 7) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n mean: (rawSource, target) => {\n const step_1 = getMeanStep(rawSource, target);\n\n const barWidth = 2;\n\n const step_2 = {\n ...step_1,\n layer: [\n {\n name: \"main\",\n mark: { type: \"tick\", orient: \"horizontal\", width: barWidth },\n encoding: {\n y: {\n ...rawSource.encoding.y,\n },\n x: {\n ...rawSource.encoding.x,\n field: CONF.X_FIELD + \"_pos_start\",\n },\n x2: {\n field: CONF.X_FIELD + \"_pos_end\",\n },\n color: rawSource.encoding.color\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n const step_3 = {\n ...step_2,\n layer: [\n {\n ...step_2.layer[0],\n mark: {\n type: \"bar\",\n width: barWidth,\n },\n encoding: {\n ...step_2.layer[0].encoding,\n y2: {\n field: \"y_mean_pos\",\n },\n },\n },\n ...step_2.layer.slice(1),\n ],\n };\n const step_4 = {\n ...step_2,\n layer: [\n {\n ...step_2.layer[0],\n mark: {\n type: \"bar\",\n width: barWidth,\n },\n encoding: {\n ...step_2.layer[0].encoding,\n y: {\n ...step_2.layer[0].encoding.y,\n field: \"y_mean_pos\",\n },\n y2: {\n field: \"y_mean_pos\",\n },\n },\n },\n ...step_2.layer.slice(1),\n ],\n };\n\n const intermediate = {\n ...rawSource,\n data: {\n values: step_1.data.values,\n },\n encoding: {\n ...rawSource.encoding,\n x: {\n ...rawSource.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n },\n };\n\n return [rawSource, intermediate, step_1, step_2, step_3, step_4, target];\n },\n /**\n * median and quantile animation steps:\n * 1) source spec\n * 2) show rules at the top and bottom\n * 3) split circles by median and move to the right and left and move rules to median level\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n median: (rawSource, target, calculatedSource, p) => {\n const percent = (p === undefined || p === null) ? 0.5 : p;\n const initial = getMedianStep(rawSource, target, 0, percent);\n const last_with_points = getMedianStep(rawSource, target, null, percent);\n\n return [\n rawSource,\n initial,\n last_with_points,\n target\n ];\n },\n};\n","/**\n * Hack faceted view since gemini.js does not support multi view animations\n * Finding coordinates of each circle and treat them as real values in the one axis view \n * Adding axis layer underneath to look exactly same as faceted view\n */\n\nimport { CONF, META_PARSE_VALUES } from \"./config\";\n\n/**\n * Get empty spec, if no data is present\n * @param {Object} spec \n * @returns vega-lite spec\n */\nexport function getEmptySpec(spec) {\n const description = spec.meta.description;\n const splitField = spec.meta.splitField;\n\n return {\n $scheme: CONF.SCHEME,\n width: 300,\n height: 300,\n meta: {\n description,\n axes: false,\n },\n data: {\n values: [\n {\n [CONF.X_FIELD]: 0,\n [CONF.Y_FIELD]: 0,\n },\n ],\n },\n mark: {\n type: \"point\",\n filled: true,\n strokeWidth: 1,\n color: \"transparent\",\n },\n encoding: {\n x: {\n field: CONF.X_FIELD,\n type: \"quantitative\",\n scale: {\n domain: [-5, 5],\n },\n axis: {\n grid: false,\n ticks: false,\n title: splitField,\n domain: false,\n values: [],\n },\n },\n y: {\n field: CONF.Y_FIELD,\n type: \"quantitative\",\n scale: {\n domain: [-5, 5],\n },\n axis: {\n grid: false,\n ticks: false,\n title: null,\n domain: false,\n values: [],\n },\n },\n },\n };\n}\n\n/**\n * Creates and returns a template for vega spec\n * @param {Number} width spec width\n * @param {Number} height spec height\n * @param {Object} axes which axes to add\n * @param {Object} spec original spec\n * @returns vega-lite spec\n */\nexport function getSpecTemplate(width, height, axes = { x: true, y: true }, spec) {\n const encoding = spec.spec.encoding;\n const mark = spec.spec.mark;\n const facet = spec.facet;\n\n if (encoding.x) {\n const title = facet && facet.column ? facet.column.title : null;\n\n encoding.x = {\n field: CONF.X_FIELD,\n type: \"quantitative\",\n scale: {},\n axis: axes.x\n ? {\n labelExpr: \"\",\n values: [],\n title: title,\n grid: false,\n orient: \"top\",\n ticks: false,\n domain: false,\n labelPadding: 10,\n }\n : null,\n };\n }\n\n if (encoding.y) {\n const title = facet && facet.row ? facet.row.title : null;\n\n encoding.y = {\n field: spec.spec.mark === \"errorbar\" ? encoding.y.field : CONF.Y_FIELD,\n type: \"quantitative\",\n scale: {},\n axis: axes.y\n ? {\n labelExpr: \"\",\n values: [],\n title: title,\n grid: false,\n labelAngle: 90,\n domain: false,\n ticks: false,\n labelPadding: 10,\n orient: \"right\",\n }\n : null,\n };\n }\n\n const additionals = {};\n\n if (spec.transform) {\n additionals.transform = spec.transform;\n }\n\n return {\n $schema: CONF.SCHEME,\n data: {\n values: [],\n },\n width: width,\n height: height,\n mark: mark,\n encoding: encoding,\n ...additionals,\n };\n}\n\n/**\n * Get hacked spec\n * Finding coordinates of each circle and treat them as real values in the one axis view \n * Adding axis layer underneath to look exactly same as faceted view\n * @param {Object} param0 parameters\n * @param {Object} param0.view a vega view instance\n * @param {Object} param0.spec a vega spec\n * @param {Object} param0.width spec width\n * @param {Object} param0.height spec height\n * @returns vega-lite spec\n */\nexport function getHackedSpec({ view, spec, width = 600, height = 600 }) {\n const rowId = spec.facet.row ? spec.facet.row.field : null;\n const colId = spec.facet.column ? spec.facet.column.field : null;\n\n const newSpec = getSpecTemplate(\n width,\n height,\n {\n x: colId,\n y: rowId,\n },\n spec\n );\n\n const yDomain = [height, 0];\n const xDomain = [0, width];\n\n const values = [];\n\n const colMap = new Map();\n const rowMap = new Map();\n\n const scaleX = view.scale(\"x\");\n const scaleY = view.scale(\"y\");\n const source = view.data(\"source\");\n\n let row_header, column_header;\n\n // y axis\n if (rowId && (row_header = view.data(\"row_header\"))) {\n const yAxisValues = [];\n const yAxisExpr = {};\n\n row_header.forEach((d, i) => {\n const bounds = d.bounds;\n const name = d.datum[rowId];\n const y1 = bounds.y1;\n const y2 = bounds.y2;\n\n rowMap.set(name, y1);\n\n const yCoord = Math.round(y1 + (y2 - y1) / 2);\n\n yAxisValues.push(yCoord);\n yAxisExpr[yCoord] = name;\n });\n\n yDomain[1] = d3.min(row_header, (d) => d.bounds.y1);\n yDomain[0] = d3.max(row_header, (d) => d.bounds.y2);\n\n newSpec.encoding.y.axis.values = yAxisValues;\n newSpec.encoding.y.axis.labelExpr = `${JSON.stringify(\n yAxisExpr\n )}[datum.label]`;\n }\n\n // x axis\n if (colId && (column_header = view.data(\"column_header\"))) {\n const xAxisValues = [];\n const xAxisExpr = {};\n\n column_header.forEach((d, i) => {\n const bounds = d.bounds;\n\n const name = d.datum[colId];\n colMap.set(name, bounds.x1);\n\n const xCoord = Math.round(bounds.x1 + (bounds.x2 - bounds.x1) / 2);\n\n xAxisValues.push(xCoord);\n xAxisExpr[xCoord] = name;\n });\n\n xDomain[0] = d3.min(column_header, (d) => d.bounds.x1);\n xDomain[1] = d3.max(column_header, (d) => d.bounds.x2);\n\n newSpec.encoding.x.axis.values = xAxisValues;\n newSpec.encoding.x.axis.labelExpr = `${JSON.stringify(\n xAxisExpr\n )}[datum.label]`;\n }\n\n // generating data.values\n source.forEach((d) => {\n const col = d[colId];\n const row = d[rowId];\n\n const xStart = colMap.get(col) || 0;\n const yStart = rowMap.get(row) || 0;\n\n const xField = spec.meta.parse === META_PARSE_VALUES.jitter ? \"x\" : CONF.X_FIELD;\n const yField = spec.meta.parse === META_PARSE_VALUES.jitter ? \"y\" : CONF.Y_FIELD;\n\n const xCoord = xStart + scaleX(d[xField]);\n\n values.push({\n ...d,\n [CONF.X_FIELD]: xCoord,\n [CONF.Y_FIELD]: yStart + scaleY(d[yField]),\n [CONF.X_FIELD + \"_num\"]: d.scaledX ? xStart + scaleX(d.scaledX) : xCoord,\n scaleX: (val) => yStart + scaleX(val),\n scaleY: (val) => yStart + scaleY(val),\n });\n });\n\n newSpec.encoding.x.scale.domain = xDomain;\n newSpec.encoding.y.scale.domain = yDomain;\n newSpec.data.values = values;\n newSpec.width = xDomain[1] - xDomain[0];\n newSpec.height = yDomain[0] - yDomain[1];\n\n return newSpec;\n}\n\n/**\n * turns faceted spec to regular spec, using hacking technique\n * @param {Object} spec vega lite spec with facets\n * @returns vega-lite spec\n */\nexport function hackFacet(spec) {\n const div = document.createElement(\"div\");\n\n spec.data.name = \"source\";\n\n return vegaEmbed(div, spec, { renderer: \"svg\" }).then((resp) => {\n const newSpec = getHackedSpec({\n ...resp,\n width: spec.spec.width,\n height: spec.spec.height,\n });\n\n if (spec.config) {\n newSpec.config = spec.config;\n }\n\n if (spec.meta) {\n newSpec.meta = spec.meta;\n }\n\n let [transformX, transformY] = resp.view._origin;\n\n if (!(spec.facet && spec.facet.row && !spec.facet.column)) {\n transformY = 0;\n }\n\n if (newSpec.meta) {\n newSpec.meta.transformX = transformX;\n newSpec.meta.transformY = transformY;\n } else {\n newSpec.meta = { transformX, transformY };\n }\n\n return newSpec;\n });\n}\n","/**\n * Entry point of Datamations JavaScript code\n * Reads vega-lite specifications, converts to vega specs and animates them\n *\n * ### Dependencies:\n * - gemini: https://github.com/uwdata/gemini\n * - vega-lite: https://vega.github.io/vega-lite/\n * - vega: https://vega.github.io/vega/\n * - vega-embed: https://github.com/vega/vega-embed\n * - d3: https://d3js.org/\n * - gifshot: https://github.com/yahoo/gifshot\n * - html2canvas: https://html2canvas.hertzen.com/\n * - download2: http://danml.com/download.html\n */\n\nimport { CONF, META_PARSE_VALUES } from \"./config\";\nimport { getSelectors, splitLayers, getRows } from \"./utils\";\nimport { hackFacet, getEmptySpec } from \"./hack-facet-view\";\nimport { getGridSpec, getJitterSpec } from \"./layout\";\nimport { CustomAnimations } from \"./custom-animations\";\n\n/**\n *\n * @param {String} id conteiner id\n * @param {Object} param1 configuration object\n * @param {Array} param1.specs list of vega-lite specifications\n * @param {Boolean} param1.autoPlay autoPlay\n * @param {Number} param1.frameDel frame duration (in ms.)\n * @param {Number} param1.frameDel delay between frames (in ms.)\n * @returns an object of exposed functions\n */\nexport default function App(id, { specs, autoPlay = false, frameDur, frameDel }) {\n let rawSpecsImmutable; // saving passed specs here, not changed by reference\n let rawSpecs; // holds raw vega-lite specs, not transformed\n let vegaLiteSpecs;\n let vegaSpecs; // vega specs\n let frames;\n let metas;\n let frameIndex = 0;\n let timeoutId;\n let playing = false;\n let initializing = false;\n let frameDuration = frameDur || 2000;\n let frameDelay = frameDel || 1000;\n\n // a fallback gemini spec in case gemini.animate could not recommend anything\n const gemSpec = {\n timeline: {\n concat: [\n {\n sync: [\n {\n component: {\n mark: \"marks\",\n },\n change: {\n data: {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: false,\n },\n encode: {\n update: true,\n enter: true,\n exit: true,\n },\n },\n timing: {\n duration: {\n ratio: 1,\n },\n },\n },\n ],\n },\n ],\n },\n totalDuration: frameDuration,\n };\n\n /**\n * Resets all the instance variables to be able to re-run animation\n */\n const reset = () => {\n vegaLiteSpecs = [];\n vegaSpecs = [];\n rawSpecs = [];\n rawSpecsImmutable = [];\n frames = [];\n metas = [];\n frameIndex = 0;\n playing = false;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n /**\n * Initializes datamation app\n */\n async function init() {\n // ignore all subsequent init calls.\n if (initializing) return;\n initializing = true;\n\n const { slider } = getSelectors(id);\n\n reset();\n\n // load or set data\n if (specs) {\n vegaLiteSpecs = JSON.parse(JSON.stringify(specs));\n }\n\n // save raw specs to use for facet axes drawing\n vegaLiteSpecs.forEach((d) => {\n rawSpecs.push(JSON.parse(JSON.stringify(d)));\n rawSpecsImmutable.push(JSON.parse(JSON.stringify(d)));\n\n if (d.meta) {\n metas.push(d.meta);\n }\n });\n\n d3.select(slider).property(\"max\", vegaLiteSpecs.length - 1);\n\n // parse, jitter, layer splitting\n await transformSpecs();\n\n // compile to vega\n toVegaSpecs();\n\n // create frames for animation\n await makeFrames();\n\n drawSpec(0);\n\n if (autoPlay) {\n setTimeout(play, 100);\n }\n\n initializing = false;\n }\n\n /**\n * Plays animation\n */\n function play(cb = () => {}) {\n playing = true;\n frameIndex = 0;\n\n const tick = () => {\n animateFrame(frameIndex, cb).then(() => {\n if (playing) {\n frameIndex++; // next frame\n\n if (frames[frameIndex]) {\n tick();\n } else {\n playing = false;\n disableEnable(\"enable\");\n }\n }\n });\n\n if (typeof HTMLWidgets !== \"undefined\" && HTMLWidgets.shinyMode) {\n var prevIndex = frameIndex - 1;\n Shiny.onInputChange(\"slider_state\", prevIndex);\n }\n };\n\n disableEnable(\"disable\");\n tick();\n }\n\n /**\n * Draws vega lite spec statically (without transition), also updates slider, description, show/hides some layers\n * @param {Number} index specification index in vegaLiteSpecs\n * @param {Object} vegaSpec source vega spec of current frame\n * @returns a promise of vegaEmbed\n */\n function drawSpec(index, vegaSpec) {\n let spec = vegaLiteSpecs[index];\n\n if (!spec) return;\n\n if (spec.custom) {\n spec = gemini.vl2vg4gemini(spec.sequence[spec.sequence.length - 1]);\n }\n\n const meta = metas[index];\n\n const {\n axisSelector,\n visSelector,\n descr,\n slider,\n otherLayers,\n controls,\n exportWrap,\n } = getSelectors(id);\n\n d3.select(slider).property(\"value\", index);\n d3.select(descr).html(meta.description || \"frame \" + index);\n d3.select(axisSelector)\n .style(\"opacity\", meta.axes ? 1 : 0)\n .html(\"\");\n d3.select(visSelector).classed(\"with-axes\", meta.axes);\n d3.select(otherLayers).classed(\"with-axes\", meta.axes);\n\n // draw axis\n if (meta.axes) {\n drawAxis(index);\n }\n\n const transformX = meta.transformX || 0;\n const transformY = meta.transformY || 0;\n\n // shift vis\n d3.select(visSelector)\n .style(\"left\", transformX + \"px\")\n .style(\"top\", transformY + \"px\");\n\n const _width = spec.width + transformX + 10;\n d3.select(controls).style(\"width\", _width + \"px\");\n d3.select(descr).style(\"width\", _width + \"px\");\n\n // draw vis\n return drawChart(spec, vegaSpec && vegaSpec.custom ? null : vegaSpec);\n }\n\n /**\n * Draws a chart, either spec or vegaSpec (which is passed from animate function)\n * Supports single view as well as multiple view chart\n * @param {Object} spec vega-lite spec\n * @param {Object} vegaSpec source vega spec of current frame\n * @returns a promise of vegaEmbed\n */\n function drawChart(spec, vegaSpec) {\n const { visSelector, otherLayers } = getSelectors(id);\n const layers = document.querySelector(otherLayers);\n layers.innerHTML = \"\";\n\n if (Array.isArray(spec)) {\n return new Promise((res) => {\n spec.forEach((s, i) => {\n let target,\n embedSpec = s;\n\n if (s.meta.animated) {\n target = visSelector;\n if (vegaSpec) {\n embedSpec = vegaSpec;\n }\n } else {\n const div = document.createElement(\"div\");\n div.classList.add(\"vega-hidden-layer\");\n layers.appendChild(div);\n target = div;\n }\n\n vegaEmbed(target, embedSpec, { renderer: \"svg\" }).then(() => {\n if (i === spec.length - 1) {\n res();\n }\n\n // ensure facet translations match in axisSelector and otherLayers\n setTimeout(() => {\n adjustAxisAndErrorbars();\n }, 100);\n });\n });\n });\n } else {\n return vegaEmbed(visSelector, vegaSpec || spec, { renderer: \"svg\" });\n }\n }\n\n /**\n * Fixes hacked axis spec and error bar alignment\n */\n function adjustAxisAndErrorbars() {\n const { axisSelector, otherLayers } = getSelectors(id);\n const axisCells = d3\n .select(axisSelector)\n .selectAll(\".mark-group.cell>g\")\n .nodes();\n const otherLayersCells = d3\n .select(otherLayers)\n .selectAll(\".mark-group.cell>g\")\n .nodes();\n\n if (axisCells.length === otherLayersCells.length) {\n for (let i = 0; i < axisCells.length; i++) {\n const transform = axisCells[i].getAttribute(\"transform\");\n otherLayersCells[i].setAttribute(\"transform\", transform);\n }\n }\n }\n\n /**\n * Draws an axis layer. This is called when meta.axes = true.\n * @param {Number} index specification index in vegaLiteSpecs\n * @returns a promise of vegaEmbed\n */\n function drawAxis(index) {\n let spec = rawSpecs[index];\n\n if (spec.spec && spec.spec.layer) {\n const split = splitLayers(spec);\n spec = split[1];\n }\n\n const columnFacet = spec.facet && spec.facet.column;\n const { axisSelector, controls, descr, otherLayers } = getSelectors(id);\n\n // update axis domain to matched hacked facet view\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n\n if (!encoding.y.scale) {\n const extentY = d3.extent(spec.data.values, (d) => d[CONF.Y_FIELD]);\n encoding.y.scale = { domain: extentY };\n }\n\n if (encoding.color) {\n encoding.color.legend = null;\n }\n\n if (encoding.fill) {\n encoding.fill.legend = null;\n }\n\n if (encoding.x && encoding.x.axis) {\n encoding.x.axis.labelAngle = -90;\n encoding.x.axis.titleOpacity = 0;\n }\n\n return vegaEmbed(axisSelector, spec, { renderer: \"svg\" }).then(() => {\n if (columnFacet && columnFacet.title) {\n const fn = function () {\n const transform = d3.select(this).attr(\"transform\");\n const x = transform.split(\"(\")[1].split(\",\")[0];\n return `translate(${x}, 40)`;\n };\n\n d3.select(axisSelector + \" svg > g\").attr(\"transform\", fn);\n d3.select(otherLayers + \" svg > g\").attr(\"transform\", fn);\n }\n const width = d3\n .select(axisSelector)\n .node()\n .getBoundingClientRect().width;\n d3.select(controls).style(\"width\", width + \"px\");\n d3.select(descr).style(\"width\", width + \"px\");\n });\n }\n\n /**\n * Animates a frame, from source to target vega specification using gemini\n * @param {Number} index specification index in vegaLiteSpecs\n * @param {Function} cb callback function of each frame drawal\n * @returns a promise of gemini.animate\n */\n async function animateFrame(index, cb) {\n if (!frames[index]) return;\n\n console.log(\"animating frame\", index);\n\n const { axisSelector, visSelector, otherLayers, descr, slider, controls } =\n getSelectors(id);\n\n let { source, target, gemSpec, prevMeta, currMeta } = frames[index];\n let anim = null;\n\n if (source.custom) {\n const _source_spec = gemini.vl2vg4gemini(\n source.sequence[source.sequence.length - 1]\n );\n anim = await gemini.animate(_source_spec, target, gemSpec);\n } else if (target.custom) {\n anim = await gemini.animateSequence(target.sequence, gemSpec);\n } else {\n anim = await gemini.animate(source, target, gemSpec);\n }\n\n let currHasAxes = currMeta.axes;\n let width = target.width;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n // initial frame\n if (index === 0 && cb) cb(0);\n\n return new Promise((res) => {\n drawSpec(index, source).then(() => {\n timeoutId = setTimeout(() => {\n d3.select(descr).html(currMeta.description);\n anim.play(visSelector).then(() => {\n d3.select(slider).property(\"value\", index + 1);\n cb && cb(index + 1);\n res();\n });\n\n const transformX = currMeta.transformX || 0;\n const transformY = currMeta.transformY || 0;\n\n d3.select(visSelector)\n .transition()\n .duration(750)\n .style(\"left\", transformX + \"px\")\n .style(\"top\", transformY + \"px\");\n\n // show/hide axis vega chart\n if (currHasAxes) {\n drawAxis(index + 1);\n d3.select(axisSelector)\n .transition()\n .duration(1000)\n .style(\"opacity\", 1);\n d3.select(visSelector).classed(\"with-axes\", true);\n d3.select(otherLayers).classed(\"with-axes\", true);\n } else {\n d3.select(axisSelector)\n .transition()\n .duration(1000)\n .style(\"opacity\", 0);\n d3.select(visSelector).classed(\"with-axes\", false);\n d3.select(otherLayers).classed(\"with-axes\", false);\n d3.select(controls).style(\"width\", width + transformX + 10 + \"px\");\n d3.select(descr).style(\"width\", width + transformX + 10 + \"px\");\n }\n\n const nextSpec = vegaLiteSpecs[index + 1];\n\n if (nextSpec && Array.isArray(nextSpec)) {\n const statics = nextSpec.filter((d) => !d.meta.animated);\n\n d3.select(otherLayers)\n .html(\"\")\n .style(\"opacity\", 0)\n .transition()\n // .delay(frameDuration / 3)\n .duration(frameDuration / 2)\n .style(\"opacity\", 1);\n\n statics.forEach((s) => {\n const div = document.createElement(\"div\");\n div.classList.add(\"vega-hidden-layer\");\n vegaEmbed(div, s, { renderer: \"svg\" }).then(() => {\n adjustAxisAndErrorbars();\n });\n document.querySelector(otherLayers).appendChild(div);\n });\n } \n }, \n // removed delay between frames for custom animations\n target.custom ? 0 : frameDelay);\n });\n });\n }\n\n /**\n * Transforms specifications into proper format:\n * - meta.grid = generates infogrid\n * - meta.jitter = jitters data using d3.forceCollide\n * - meta.custom_animation = handles custom animation type\n * - spec.layer = splits layers to stack on top on each other\n */\n async function transformSpecs() {\n const rows = getRows(vegaLiteSpecs);\n\n for (let i = 0; i < vegaLiteSpecs.length; i++) {\n let vlSpec = vegaLiteSpecs[i];\n\n if (Array.isArray(vlSpec)) continue; // just sanity check, making sure that it is not an array\n\n // if filter has empty `oneOf`, then generate empty spec and avoid any further processing\n if (\n vlSpec.transform &&\n vlSpec.transform[0].filter &&\n vlSpec.transform[0].filter.oneOf &&\n vlSpec.transform[0].filter.oneOf.length === 0\n ) {\n const emptySpec = getEmptySpec(vlSpec);\n\n metas[i] = emptySpec.meta;\n rawSpecs[i] = emptySpec;\n vlSpec = emptySpec;\n vegaLiteSpecs[i] = emptySpec;\n continue;\n }\n\n const meta = vlSpec.meta;\n const parse = meta.parse;\n\n // parsing\n\n if (meta.custom_animation) {\n let funName = meta.custom_animation;\n let p = null;\n\n // handle quantile\n if (\n Array.isArray(meta.custom_animation) &&\n meta.custom_animation[0] === \"quantile\"\n ) {\n p = meta.custom_animation[1];\n funName = \"median\";\n }\n\n let source = {\n ...rawSpecs[i - 1],\n data: rawSpecsImmutable[i - 1].data,\n };\n let target = vlSpec;\n\n if (rawSpecsImmutable[i - 1].facet) {\n source = {\n ...vegaLiteSpecs[i - 1],\n meta: {\n ...vegaLiteSpecs[i - 1].meta,\n hasFacet: true,\n columnFacet: rawSpecsImmutable[i - 1].facet.column,\n rowFacet: rawSpecsImmutable[i - 1].facet.row,\n },\n data: {\n values: vegaLiteSpecs[i - 1].data.values.map((d) => {\n return {\n ...d,\n [CONF.X_FIELD]: d[CONF.X_FIELD + \"_num\"],\n };\n }),\n },\n };\n }\n\n // if custom animations have facets, fake them before passing to CustomAnimation\n if (vegaLiteSpecs[i].facet) {\n const newSpecTarget = await hackFacet(vegaLiteSpecs[i]);\n vegaLiteSpecs[i] = newSpecTarget;\n target = newSpecTarget;\n }\n\n const fn = CustomAnimations[funName];\n\n if (fn) {\n const sequence = await fn(source, target, vegaLiteSpecs[i - 1], p);\n vegaLiteSpecs[i] = {\n custom: meta.custom_animation,\n sequence,\n };\n }\n } else if (parse === META_PARSE_VALUES.grid) {\n const gridSpec = await getGridSpec(vlSpec, rows);\n\n const enc = gridSpec.spec ? gridSpec.spec.encoding : gridSpec.encoding;\n rawSpecs[i].data.values = gridSpec.data.values;\n\n // update domain for raw spec axis layer\n if (rawSpecs[i].meta.axes && rawSpecs[i].meta.splitField) {\n const encoding = rawSpecs[i].spec\n ? rawSpecs[i].spec.encoding\n : rawSpecs[i].encoding;\n\n encoding.x.axis = enc.x.axis;\n encoding.y.scale = {\n domain: enc.y.scale.domain,\n };\n encoding.x.scale = {\n domain: enc.x.scale.domain,\n };\n }\n\n vegaLiteSpecs[i] = gridSpec;\n } \n else if (parse === META_PARSE_VALUES.jitter) {\n vegaLiteSpecs[i] = await getJitterSpec(vlSpec);\n } \n // since gemini does not support multiple multiple axis transitions, \n // we must split the layers and draw as separate vega spec\n else if (vlSpec.layer || (vlSpec.spec && vlSpec.spec.layer)) {\n const arr = splitLayers(vlSpec);\n\n vegaLiteSpecs[i] = [];\n\n for (let j = 0; j < arr.length; j++) {\n const s = arr[j];\n\n // fake facets\n if (s.facet && s.spec && s.meta.animated) {\n const newSpec = await hackFacet(s);\n vegaLiteSpecs[i].push(newSpec);\n metas[i] = newSpec.meta;\n } else {\n vegaLiteSpecs[i].push(s);\n }\n }\n }\n\n if (vegaLiteSpecs[i]) {\n const facet = vegaLiteSpecs[i].facet;\n const spec = vegaLiteSpecs[i].spec;\n\n // fake facets\n if (facet && spec) {\n const newSpec = await hackFacet(vegaLiteSpecs[i]);\n vegaLiteSpecs[i] = newSpec;\n }\n }\n }\n\n console.log(\"parsed specs:\", vegaLiteSpecs);\n }\n\n /**\n * Converts vega-lite specs to vega specs using vl2vg4gemini (https://github.com/uwdata/gemini#vl2vg4gemini)\n */\n function toVegaSpecs() {\n vegaSpecs = vegaLiteSpecs.map((d) => {\n if (d.custom) {\n return d;\n }\n\n const s = Array.isArray(d) ? d.find((d) => d.meta.animated) : d;\n return gemini.vl2vg4gemini(s);\n });\n }\n\n /**\n * Generates animation frames\n * @returns array of objects of \\{ source, target, gemSpec, prevMeta, currMeta \\}\n */\n async function makeFrames() {\n const options = {\n stageN: 1,\n\n scales: {\n x: {\n domainDimension: \"diff\",\n },\n y: {\n domainDimension: \"diff\",\n },\n },\n\n marks: {\n marks: {\n change: {\n scale: [\"x\", \"y\"],\n data: {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: true,\n },\n encode: {\n update: true,\n enter: true,\n exit: true,\n },\n },\n },\n },\n totalDuration: frameDuration,\n };\n\n for (let i = 1; i < vegaSpecs.length; i++) {\n const prev = vegaSpecs[i - 1];\n const curr = vegaSpecs[i];\n\n const prevMeta = metas[i - 1];\n const currMeta = metas[i];\n\n try {\n let resp = null;\n\n if (curr.custom) {\n resp = await gemini.recommendForSeq(curr.sequence, {\n ...options,\n stageN: curr.sequence.length - 1,\n totalDuration: frameDuration * 2,\n });\n\n const _gemSpec = resp[0].specs.map((d) => d.spec);\n\n // make sure to add gemini_id to data change.\n // gemini recommend does not add it by itself.\n _gemSpec.forEach((d) => {\n if (d.timeline.concat.length) {\n const first = d.timeline.concat[0].sync[0];\n if (first && first.change && first.change.data) {\n first.change.data = {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: true,\n };\n }\n }\n });\n\n frames.push({\n source: prev,\n target: curr,\n gemSpec: _gemSpec,\n prevMeta,\n currMeta,\n });\n } else {\n resp = await gemini.recommend(\n prev.custom\n ? gemini.vl2vg4gemini(prev.sequence[prev.sequence.length - 1])\n : prev,\n curr,\n options\n );\n\n const _gemSpec = resp[0] ? resp[0].spec : gemSpec;\n const sync = _gemSpec.timeline.concat[0].sync;\n\n if (!sync.some((d) => d.component === \"view\")) {\n sync.push({\n component: \"view\",\n change: {\n signal: [\"width\", \"height\"],\n },\n timing: {\n duration: {\n ratio: 1,\n },\n },\n });\n }\n\n frames.push({\n source: prev,\n target: curr,\n gemSpec: _gemSpec,\n prevMeta,\n currMeta,\n });\n }\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n /**\n * Slider on change callback\n */\n function onSlide() {\n playing = false;\n disableEnable(\"enable\");\n const { slider } = getSelectors(id);\n const index = document.querySelector(slider).value;\n drawSpec(index);\n }\n\n /**\n * Exports png files for each frame\n */\n function exportPNG() {\n const { exportWrap } = getSelectors(id);\n\n const pngs = [];\n\n const callback = (index) => {\n const done = index >= frames.length;\n\n html2canvas(document.querySelector(exportWrap)).then((canvas) => {\n pngs.push(canvas.toDataURL());\n\n if (done) {\n pngs.forEach((uri, i) => {\n var a = document.createElement(\"a\");\n a.href = uri;\n a.download = `frame-${i + 1}.png`;\n a.click();\n });\n }\n });\n };\n\n play(callback);\n }\n\n /**\n * Exports datamation as gif.\n * @param {Boolean} fromWeb truthy if it is called from webpage, falsy from command line tool\n * @returns either base64 string, or downloads .gif file\n */\n function exportGif(fromWeb) {\n const { exportWrap, exportBtn } = getSelectors(id);\n\n if (fromWeb) {\n loaderOnOff(true);\n disableEnable(\"disable\", { slider: true });\n }\n\n let intervalId,\n images = [];\n\n const startInterval = () => {\n if (intervalId) clearInterval(intervalId);\n\n intervalId = setInterval(() => {\n html2canvas(document.querySelector(exportWrap)).then((canvas) => {\n images.push(canvas.toDataURL());\n });\n }, 16.66666);\n };\n\n let maxWidth = 300;\n let maxHeight = 300;\n\n return new Promise((res) => {\n const callback = (index) => {\n const done = index >= frames.length;\n const bound = document\n .querySelector(exportWrap)\n .getBoundingClientRect();\n\n if (bound.width > maxWidth) maxWidth = bound.width;\n if (bound.height > maxHeight) maxHeight = bound.height;\n\n if (done) {\n intervalId && clearInterval(intervalId);\n\n setTimeout(() => {\n gifshot.createGIF(\n {\n images,\n gifWidth: maxWidth,\n gifHeight: maxHeight,\n frameDuration: 2.5,\n },\n function (obj) {\n if (fromWeb) {\n loaderOnOff(false);\n disableEnable(\"enable\", { slider: true });\n }\n\n if (!obj.error) {\n var image = obj.image;\n\n if (fromWeb) {\n download(image, \"animation.gif\", \"image/gif\");\n }\n res(image);\n } else {\n console.error(\"error creating gif\", obj.errorMsg);\n }\n }\n );\n }, 1000);\n } else {\n intervalId && clearInterval(intervalId);\n setTimeout(startInterval, frameDelay);\n }\n };\n\n play(callback);\n });\n }\n\n /**\n * Disables or enables some components\n * @param {String} cmd \"disable\" or \"enable\"\n * @param {Array} components array of components\n */\n function disableEnable(cmd, components) {\n const { replayBtn, exportBtn, slider } = getSelectors(id);\n const arr = [replayBtn, exportBtn];\n\n if (components && components.slider) {\n arr.push(slider);\n }\n\n arr.forEach((sel) => {\n const el = document.querySelector(sel);\n\n if (cmd == \"disable\") {\n el.setAttribute(\"disabled\", \"disabled\");\n } else {\n el.removeAttribute(\"disabled\");\n }\n });\n }\n\n /**\n * Download button icon adjustment\n * @param {Boolean} loading\n */\n function loaderOnOff(loading) {\n const { exportBtn } = getSelectors(id);\n let className = \"fas fa-download\";\n\n if (loading) {\n className = \"fas fa-spinner spin\";\n }\n\n d3.select(exportBtn).select(\"i\").attr(\"class\", className);\n }\n\n init();\n\n return {\n onSlide,\n play,\n exportPNG,\n exportGif,\n animateFrame,\n getFrames: () => frames,\n };\n}\n"],"names":["undefined"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","sources":["../../node_modules/core-js/index.js","../../node_modules/regenerator-runtime/runtime.js","../../scripts/config.js","../../scripts/utils.js","../../scripts/layout.js","../../scripts/custom-animations.js","../../scripts/hack-facet-view.js","../../scripts/app.js"],"sourcesContent":["module.exports = require('./features');\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","export const CONF = {\n X_FIELD: \"datamations_x\",\n Y_FIELD: \"datamations_y\",\n ORDER_FIELD: \"datamations_order\",\n SCHEME: \"https://vega.github.io/schema/vega-lite/v4.json\",\n};\n\nexport const IGNORE_FIELDS = [\n 'tooltip', 'x', 'y',\n 'datamations_x', 'datamations_y'\n];\n\nexport const META_PARSE_VALUES = {\n grid: \"grid\",\n jitter: \"jitter\",\n};","import { IGNORE_FIELDS } from \"./config.js\";\n\n/**\n * Gets selectors for each componenent, such as slider and animation divs\n * @param {String} id root container id where all the animation components are rendered\n * @returns object of selectors\n */\nexport function getSelectors(id) {\n const base = \"#\" + id;\n\n return {\n axisSelector: base + \" .vega-for-axis\",\n visSelector: base + \" .vega-vis\",\n descr: base + \" .description\",\n slider: base + \" .slider\",\n otherLayers: base + \" .vega-other-layers\",\n controls: base + \" .controls-wrapper\",\n exportWrap: base + \" .export-wrapper\",\n exportBtn: base + \" .export-btn\",\n replayBtn: base + \" .replay-btn\",\n };\n}\n\n/**\n * Splits layers into separate vega-lite specifications, removes layer field\n * @param {Object} input vega-lite specification with layers\n * @returns a list of specs\n */\nexport function splitLayers(input) {\n const specArray = [];\n const spec = input.spec;\n\n if (spec && spec.layer) {\n spec.layer.forEach((d, i) => {\n const obj = JSON.parse(JSON.stringify(input));\n const animated = i === spec.layer.length - 1;\n\n if (obj.meta) {\n obj.meta.animated = animated;\n } else {\n obj.meta = { animated };\n }\n\n obj.spec.encoding = d.encoding;\n obj.spec.mark = d.mark;\n delete obj.spec.layer;\n specArray.push(obj);\n });\n } else if (input.layer) {\n input.layer.forEach((d, i) => {\n const obj = JSON.parse(JSON.stringify(input));\n const animated = i === input.layer.length - 1;\n\n if (obj.meta) {\n obj.meta.animated = animated;\n } else {\n obj.meta = { animated };\n }\n\n obj.encoding = d.encoding;\n obj.mark = d.mark;\n delete obj.layer;\n specArray.push(obj);\n });\n }\n\n return specArray;\n}\n\n/**\n * Looks up a word based of buckets and value.\n * Example:\n * - words: ['a', 'b', 'c']\n * - buckets: [10, 20, 30]\n * - value: 25\n * will return 'c'\n * @param {Array} words list of words\n * @param {Array} buckets list of numbers\n * @param {Number} value score to lookup\n */\nexport function lookupByBucket(words, buckets, value) {\n return words[buckets.findIndex((d) => value <= d)];\n}\n\n/**\n * Finds correct number of rows for grid based on biggest group\n * @param {Array} vegaLiteSpecs an array of vega lite specs\n * @returns a number of rows\n */\nexport function getRows(vegaLiteSpecs) {\n let maxRows = 0;\n\n vegaLiteSpecs\n .filter((d) => d.meta.parse === \"grid\")\n .forEach((spec) => {\n let { width: specWidth, height: specHeight } = spec.spec || spec;\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const splitField = spec.meta.splitField;\n const groupKeys = [];\n\n if (spec.facet) {\n if (spec.facet.column) {\n groupKeys.push(spec.facet.column.field);\n }\n if (spec.facet.row) {\n groupKeys.push(spec.facet.row.field);\n }\n }\n\n let specValues = spec.data.values;\n\n const gap = 2;\n const distance = 4 + gap;\n\n let secondarySplit = Object.keys(encoding).filter((d) => {\n const field = encoding[d].field;\n return (\n field !== splitField &&\n IGNORE_FIELDS.indexOf(d) === -1 &&\n groupKeys.indexOf(field) === -1\n );\n })[0];\n\n // combine groups if secondarySplit\n if (splitField && secondarySplit) {\n const secondaryField = encoding[secondarySplit].field;\n const keys = [...groupKeys, splitField];\n\n const grouped = d3.rollups(\n specValues,\n (arr) => {\n const obj = {};\n let sum = 0;\n\n arr.forEach((x) => {\n sum += x.n;\n obj[x[secondaryField]] = sum;\n });\n\n const o = {\n [splitField]: arr[0][splitField],\n [secondaryField]: obj,\n n: sum,\n };\n\n groupKeys.forEach((x) => {\n o[x] = arr[0][x];\n });\n\n return o;\n },\n ...keys.map((key) => {\n return (d) => d[key];\n })\n );\n\n specValues = grouped.flatMap((d) => {\n if (keys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n\n specWidth = specWidth / grouped.length;\n }\n\n const maxN = d3.max(specValues, (d) => d.n);\n\n let rows = Math.ceil(Math.sqrt(maxN));\n let maxCols = Math.ceil(maxN / rows);\n\n // if horizontal gap is less than 5,\n // then take up all vertical space to increase rows and reduce columns\n if (specWidth / maxCols < 5) {\n rows = Math.floor(specHeight / distance);\n }\n\n if (rows > maxRows) {\n maxRows = rows;\n }\n });\n\n return maxRows;\n}\n","/*\n* Layout generation functions for datamations.\n* Supports:\n* - grid view: meta.parse = \"grid\"\n* - jittered view: meta.parse = \"jitter\"\n*/\nimport { CONF, IGNORE_FIELDS } from \"./config.js\";\nimport { lookupByBucket } from \"./utils.js\";\n\n/**\n * Generates data for grid specs\n * @param {Object} spec vega-lite spec\n * @param {Number} rows number of rows\n * @param {Boolean} stacked if true, circles are stacked and vertically aliged\n * @returns an array of objects\n */\nexport function generateGrid(spec, rows = 10, stacked = false) {\n const splitField = spec.meta.splitField;\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const groupKeys = [];\n\n let {width: specWidth} = spec.spec || spec;\n\n if (spec.facet) {\n if (spec.facet.column) {\n groupKeys.push(spec.facet.column.field);\n spec.facet.column.sort = { \"field\": CONF.ORDER_FIELD };\n }\n if (spec.facet.row) {\n groupKeys.push(spec.facet.row.field);\n spec.facet.row.sort = { \"field\": CONF.ORDER_FIELD };\n }\n }\n\n let specValues = spec.data.values;\n\n const metas = [];\n\n specValues.forEach((d, i) => {\n d[CONF.ORDER_FIELD] = i;\n if (d.meta) {\n metas.push(...Object.keys(d.meta));\n }\n });\n\n let secondarySplit = Object.keys(encoding).filter(d => {\n const field = encoding[d].field;\n return field !== splitField &&\n IGNORE_FIELDS.indexOf(d) === -1 &&\n groupKeys.indexOf(field) === -1 &&\n metas.indexOf(field) === -1;\n })[0];\n\n let secondaryField = null;\n\n // combine groups\n // for example, if splitField = player, but color = hit:\n\n // { \"n\": 5, \"player\": \"a\", \"hit\": \"yes\" },\n // { \"n\": 10, \"player\": \"a\", \"hit\": \"no\" },\n // { \"n\": 15, \"player\": \"b\", \"hit\": \"yes\" },\n // { \"n\": 35, \"player\": \"b\", \"hit\": \"no\" }\n\n // after this code block we will get:\n // { \"n\": 15, \"player\": \"a\", \"hit\": { \"yes\": 5, \"no\": 10 } },\n // { \"n\": 50, \"player\": \"b\", \"hit\": { \"yes\": 15, \"no\": 35 } },\n\n if (splitField && secondarySplit) {\n secondaryField = encoding[secondarySplit].field;\n const keys = [...groupKeys, splitField];\n\n const grouped = d3.rollups(\n specValues,\n arr => {\n const obj = {};\n let sum = 0;\n\n arr.forEach(x => {\n sum += x.n;\n obj[x[secondaryField]] = sum;\n });\n\n const o = {\n [splitField]: arr[0][splitField],\n [secondaryField]: obj,\n n: sum,\n };\n\n groupKeys.forEach(x => {\n o[x] = arr[0][x];\n });\n\n return o;\n },\n ...keys.map((key) => {\n return (d) => d[key];\n })\n );\n\n specValues = grouped.flatMap((d) => {\n if (keys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n\n specWidth = specWidth / grouped.length;\n }\n\n let maxCols = Math.ceil(d3.max(specValues, d => d.n) / rows);\n let splitOptions = [];\n\n if (splitField) {\n splitOptions = Array.from(\n new Set(specValues.map((d) => d[splitField]))\n )\n }\n\n let counter = 1;\n\n const reduce = (v) => {\n const arr = [];\n\n v.forEach((d, j) => {\n const n = d.n;\n const columns = Math.ceil(n / rows);\n const xCenter = splitField ? splitOptions.indexOf(d[splitField]) + 1 : 1;\n\n let startCol = (xCenter - 1) * maxCols + j; // inner grid start\n startCol += Math.floor((maxCols - columns) / 2); // center alignment\n\n const datum = {};\n\n // remove n and gemini_ids, we won't need them any more\n Object.keys(d).forEach(k => {\n if (k !== 'n' && k !== 'gemini_ids') {\n datum[k] = d[k];\n }\n });\n\n for (let i = 0; i < n; i++) {\n const x = startCol + Math.floor(i / rows);\n const y = rows - 1 - i % rows;\n const colorFieldObj = {};\n\n // for secondary split, e.g. is_hit, find correct key and value\n if (secondaryField && typeof[d[secondaryField]] === \"object\") {\n const keys = Object.keys(d[secondaryField]).sort((a, b) => {\n return d[secondaryField][a] - d[secondaryField][b];\n });\n\n colorFieldObj[secondaryField] = lookupByBucket(\n keys,\n keys.map(k => d[secondaryField][k]),\n i + 1,\n );\n }\n\n arr.push({\n ...datum,\n ...colorFieldObj,\n gemini_id: d.gemini_ids ? d.gemini_ids[i] : counter,\n [CONF.X_FIELD]: stacked ? xCenter : x,\n [CONF.Y_FIELD]: stacked ? i + 1 : y,\n });\n\n counter++;\n }\n });\n\n return arr;\n };\n\n let gridValues = [];\n\n if (groupKeys.length === 0) {\n gridValues = reduce(specValues);\n } else {\n gridValues = d3.rollups(\n specValues,\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n )\n .flatMap((d) => {\n if (groupKeys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n }\n\n const num_groups = splitOptions.length;\n\n return {\n gridValues,\n domain: [\n -maxCols / 2,\n (num_groups * maxCols) + (num_groups - 1) + maxCols / 2 - 1\n ],\n num_groups\n };\n}\n\n/**\n * Generates infogrid specification\n * @param {Object} spec vega-lite specification\n * @param {Number} rows number of rows in a grid\n * @returns grid specification\n */\nexport function getGridSpec(spec, rows = 10, stacked = false) {\n return new Promise((res) => {\n const { gridValues: grid, domain, num_groups } = generateGrid(spec, rows, stacked);\n const obj = {...spec};\n const encoding = obj.spec ? obj.spec.encoding : obj.encoding;\n\n const dx = stacked ? 1 : 1;\n\n const xDomain = stacked || num_groups === 0 ? [\n d3.min(grid, d => d[CONF.X_FIELD]) - dx,\n d3.max(grid, d => d[CONF.X_FIELD]) + dx\n ] : domain;\n\n const yPadding = (spec.facet && spec.facet.row) ? 0.8 : 0.4;\n\n const yDomain = [\n stacked ? 0 : d3.min(grid, (d) => d[CONF.Y_FIELD]) - yPadding,\n d3.max(grid, (d) => d[CONF.Y_FIELD]) + yPadding + (stacked ? 10 : 0),\n ];\n\n const middle = yDomain[0] + (yDomain[1] - yDomain[0]) / 2;\n\n obj.data.values = grid;\n\n encoding.x.scale = {\n type: \"linear\",\n domain: xDomain,\n };\n\n encoding.y.scale = {\n type: \"linear\",\n domain: [\n Math.min(yDomain[0], middle - rows / 2),\n Math.max(yDomain[1], middle + rows / 2)\n ],\n };\n\n encoding.x.field = CONF.X_FIELD;\n encoding.y.field = CONF.Y_FIELD;\n\n // set axis labels when splitField\n if (spec.meta.splitField) {\n const labels = Array.from(\n new Set(grid.map(d => d[spec.meta.splitField]))\n );\n\n const expr = {};\n\n labels.forEach((d) => {\n // find min and max x values for each label\n const extent = d3.extent(\n spec.data.values.filter(x => x[spec.meta.splitField] === d),\n d => d[CONF.X_FIELD],\n );\n\n const middle = Math.ceil(extent[0] + (extent[1] - extent[0]) / 2);\n expr[middle] = d;\n });\n\n spec.meta.rules = obj.meta.rules = labels.map(m => {\n return {\n filter: `datum['${spec.meta.splitField}'] === '${m}'`,\n groupKey: spec.meta.splitField,\n groupValue: m,\n }\n });\n\n encoding.x.axis = {\n labelExpr: `${JSON.stringify(expr)}[datum.label]`,\n values: Object.keys(expr).map(d => +d),\n labelAngle: -90,\n grid: false,\n title: spec.meta.splitField,\n };\n }\n\n return res(obj);\n });\n}\n\n/**\n * Generates jittered specification using d3-force\n * @param {Object} spec vega-lite specification\n * @returns jittered spec\n */\nexport function getJitterSpec(spec) {\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const width = spec.spec ? spec.spec.width : spec.width;\n const nodes = spec.data.values;\n\n const circleRadius = 4;\n\n let innerGroupCount = 1;\n\n if (spec.meta.splitField) {\n innerGroupCount = new Set(\n nodes.map(d => d[spec.meta.splitField])\n ).size;\n }\n\n const facetSize = width ? width : 150;\n const yExtent = d3.extent(nodes, d => d[CONF.Y_FIELD]);\n const xScale = d3.scaleBand()\n .domain(d3.range(1, innerGroupCount + 1))\n .range([0, facetSize])\n .paddingOuter(0.5);\n\n const arr = nodes.slice().filter(d => d[CONF.Y_FIELD] !== undefined).map((d, i) => {\n d.oldX = d[CONF.X_FIELD];\n d.oldY = d[CONF.Y_FIELD];\n\n let x = xScale(d[CONF.X_FIELD]) + xScale.bandwidth() / 2;\n let y = d[CONF.Y_FIELD];\n\n d.scaledX = Math.round(x);\n\n return {\n ...d,\n x: x,\n y: y,\n };\n });\n\n const simulation = d3\n .forceSimulation(arr)\n .force(\"x\", d3.forceX().x(d => d.x))\n .force(\"y\", d3.forceY().strength(0.002).y(d => d[CONF.Y_FIELD]))\n .force(\"collide\", d3\n .forceCollide()\n .strength(0.01)\n .radius(circleRadius)\n )\n .stop();\n\n return new Promise((res) => {\n const bandwidth = xScale.bandwidth() * 0.9;\n\n for (let i = 0; i < 120; i++) {\n simulation.tick();\n\n arr.forEach(d => {\n const x = xScale(d.oldX);\n d.y = d.oldY;\n \n // restrict to the bounds: [5%, 95%] of width\n d.x = Math.max(\n x + xScale.bandwidth() * 0.05,\n Math.min(x + bandwidth, d.x),\n );\n })\n }\n\n if (encoding.y.scale) {\n encoding.y.scale.domain = yExtent\n } else {\n encoding.y.scale = {\n domain: yExtent\n }\n }\n\n encoding.x.scale = {\n domain: [0, facetSize]\n }\n\n // jitter still needs encoding fields to be x and y,\n // because d3-force uses x and y internally.\n encoding.x.field = \"x\";\n encoding.y.field = \"y\";\n\n // if meta.axes is falsy, and we have custom x-axis\n if (!spec.meta.axes && encoding.x.axis && spec.meta.xAxisLabels) {\n const labels = spec.meta.xAxisLabels;\n\n const axisExpr = {};\n const mapped = labels.map((d, i) => {\n const x = Math.round(xScale(i + 1) + xScale.bandwidth() / 2);\n axisExpr[x] = d;\n return { x, label: d };\n });\n\n encoding.x.axis.labelExpr = `${JSON.stringify(axisExpr)}[datum.label]`;\n encoding.x.axis.values = mapped.map(d => d.x);\n }\n\n return res({\n ...spec,\n data: {\n name: \"source\",\n values: arr,\n },\n });\n });\n}","/**\n * Custom animations generation script.\n * Supports:\n * - count\n * - median\n * - mean\n * - quantile\n * - min\n * - max\n * Inspiration from: https://giorgi-ghviniashvili.github.io/aggregate-animation-data/designs/\n */\n\nimport { CONF } from \"./config.js\";\nimport { getGridSpec } from \"./layout.js\";\n\n/**\n * Generates a spec for count animation\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {Object} shrink if truthy, circles will be pulled up\n * @returns a vega lite spec\n */\nexport const getCountStep = (source, target, shrink = false) => {\n const { width, height } = target.spec || target;\n let values = source.data.values.slice();\n const sourceMeta = source.meta;\n\n // generate rules layer\n const rules = sourceMeta.rules.map((d, i) => {\n const n = sourceMeta.rules.length;\n return {\n transform: [{ filter: d.filter }],\n name: `rule-${i + 1}`,\n mark: {\n type: \"rule\",\n x: { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: \"count\",\n // axis: null,\n },\n },\n };\n });\n\n if (shrink) {\n values = values.map((d, i) => {\n const y = target.data.values[i][CONF.Y_FIELD];\n return {\n ...d,\n [CONF.Y_FIELD]: y,\n };\n });\n }\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: source.encoding,\n },\n ...rules,\n ],\n };\n};\n\n/**\n * Generates a spec for median and quantile animations\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {Number} step step counter. null is the last step\n * @param {Number} p a percentile\n * @returns a vega lite spec\n */\nexport const getMedianStep = (source, target, step = 0, p = 0.5) => {\n const all_groups = [];\n const { width, height } = target.spec || target;\n const isLast = step === null;\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n const values = [];\n\n const reduce = (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n\n let sorted = data\n .slice()\n .sort((a, b) => {\n const sortFn = hasFacet ? \"descending\" : \"ascending\";\n return d3[sortFn](a[CONF.Y_FIELD], b[CONF.Y_FIELD]);\n })\n .map((d, i) => {\n return {\n ...d,\n rank: i + 1,\n };\n });\n\n // inspired by median animation https://uwdata.github.io/gemini2-editor/ \n const y_median = d3.quantile(sorted, p, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const y_median_pos = hasFacet ? data[0].scaleY(y_median) : y_median;\n const median_rank = d3.quantile(sorted, 0.5, (d) => d.rank);\n const max_rank = d3.max(sorted, (d) => d.rank);\n const diff = isLast ? null : max_rank - median_rank - step;\n const dx = hasFacet ? 5 : 0.1;\n\n sorted = sorted.map((d) => {\n const rank_delta_abs = Math.abs(d.rank - median_rank);\n const y_delta = (hasFacet ? d.oldY : d[CONF.Y_FIELD]) - y_median;\n const bisection =\n diff !== null && rank_delta_abs <= diff ? 0 : y_delta > 0 ? 1 : -1;\n\n let newField = null;\n\n if (bisection === -1) {\n newField = d[CONF.X_FIELD] - dx;\n } else if (bisection === 1) {\n newField = d[CONF.X_FIELD] + dx;\n } else {\n newField = d[CONF.X_FIELD];\n }\n\n return {\n ...d,\n bisection,\n [CONF.X_FIELD + \"_pos\"]: newField,\n y_median,\n y_median_pos,\n };\n });\n\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue} && datum.bisection === 0`;\n let groupFilter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupFilter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupFilter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupFilter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupFilter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n all_groups.push({\n filter,\n groupFilter,\n groupValue,\n groupKey: CONF.X_FIELD,\n median: y_median,\n groupId,\n median_pos: y_median_pos,\n rankDiff: Math.abs(max_rank - median_rank),\n rule_start: d3.min(sorted, (d) => d[CONF.X_FIELD + \"_pos\"]) + 1,\n rule_end: d3.max(sorted, (d) => d[CONF.X_FIELD + \"_pos\"]) - 1,\n });\n\n values.push(...sorted);\n };\n\n const groupKeys = [CONF.X_FIELD];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n d3.rollup(\n source.data.values.slice(),\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = [];\n\n let ruleField = isLast ? \"y_median\" : CONF.Y_FIELD;\n\n if (hasFacet) {\n ruleField = isLast ? \"y_median_pos\" : CONF.Y_FIELD;\n }\n\n all_groups.forEach((d, i) => {\n const n = all_groups.length;\n\n const top_rule = {\n transform: isLast ? [{ filter: d.groupFilter }] : [{ filter: d.filter }],\n name: `top_rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? d.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: ruleField,\n type: \"quantitative\",\n aggregate: \"max\",\n axis: null,\n },\n },\n };\n\n const bottom_rule = {\n transform: isLast ? [{ filter: d.groupFilter }] : [{ filter: d.filter }],\n name: `bottom_rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? d.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: ruleField,\n type: \"quantitative\",\n aggregate: \"min\",\n axis: null,\n },\n },\n };\n\n rules.push(top_rule, bottom_rule);\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n x: {\n ...source.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n color: source.encoding.color\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Generates a spec for mean animation\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @returns a vega lite spec\n */\nexport const getMeanStep = (source, target) => {\n const all_groups = [];\n const { width, height } = target.spec || target;\n const domain = source.encoding.y.scale.domain;\n\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n\n const values = [];\n\n const reduce = (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n\n let sorted = data\n .slice()\n .sort((a, b) => {\n const sortFn = hasFacet ? \"descending\" : \"ascending\";\n return d3[sortFn](a[CONF.Y_FIELD], b[CONF.Y_FIELD]);\n })\n .map((d, i) => {\n return {\n ...d,\n rank: i + 1,\n };\n });\n\n const y_mean = d3.mean(sorted, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const y_mean_pos = hasFacet ? data[0].scaleY(y_mean) : y_mean;\n const mean_rank = d3.mean(sorted, (d) => d.rank);\n const max_rank = d3.max(sorted, (d) => d.rank);\n const dividor = max_rank * 1.4;\n const multiplier = hasFacet ? 25 : 1;\n\n sorted = sorted.map((d) => {\n const rankRatio_from_mean = (d.rank - mean_rank) / dividor;\n\n const rankRatio_from_mean_start = (d.rank - 0.5 - mean_rank) / dividor;\n const rankRatio_from_mean_end = (d.rank + 0.5 - mean_rank) / dividor;\n\n return {\n ...d,\n [CONF.X_FIELD + \"_pos\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean * multiplier,\n [CONF.X_FIELD + \"_pos_start\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean_start * multiplier,\n [CONF.X_FIELD + \"_pos_end\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean_end * multiplier,\n y_mean,\n y_mean_pos,\n };\n });\n\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n all_groups.push({\n filter,\n groupValue,\n groupKey: CONF.X_FIELD,\n groupId: groupId,\n mean: y_mean,\n mean_pos: y_mean_pos,\n rule_start: d3.min(sorted, (d) => d[CONF.X_FIELD + \"_pos_start\"]),\n rule_end: d3.max(sorted, (d) => d[CONF.X_FIELD + \"_pos_end\"]),\n });\n\n values.push(...sorted);\n\n return sorted;\n };\n\n const groupKeys = [CONF.X_FIELD];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n d3.rollups(\n source.data.values.slice(),\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = [];\n\n all_groups.forEach((d, i) => {\n const n = all_groups.length;\n\n const rule = {\n transform: [{ filter: d.filter }],\n name: `rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : {\n expr: `${i + 1} * (width / ${n + 1}) - (width / ${n + 1}) * 0.35`,\n },\n x2: hasFacet\n ? d.rule_end\n : {\n expr: `${i + 1} * (width / ${n + 1}) + (width / ${n + 1}) * 0.35`,\n },\n },\n encoding: {\n y: {\n field: hasFacet ? \"y_mean_pos\" : CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: \"mean\",\n axis: null,\n scale: { domain },\n },\n },\n };\n\n rules.push(rule);\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n x: {\n ...source.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Generates a spec for min and max animations\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {String} minOrMax \"min\" or \"max\"\n * @returns a vega lite spec\n */\nexport const getMinMaxStep = (source, target, minOrMax = \"min\") => {\n const { width, height } = target.spec || target;\n const aggrFn = minOrMax === \"min\" ? d3.min : d3.max;\n const domain = source.encoding.y.scale.domain;\n const groupKeys = [CONF.X_FIELD];\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n\n const values = [];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n const all_groups = [];\n\n d3.rollup(\n source.data.values.slice(),\n (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n const aggr = aggrFn(data, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const aggr_pos = hasFacet ? data[0].scaleY(aggr) : aggr;\n\n all_groups.push({\n filter,\n groupValue,\n groupKey: CONF.X_FIELD,\n aggr,\n aggr_pos,\n groupId,\n rule_start: d3.min(data, (d) => d[CONF.X_FIELD] - 2),\n rule_end: d3.max(data, (d) => d[CONF.X_FIELD] + 2),\n });\n\n const g = data.find((d) => {\n const v = hasFacet ? d.oldY : d[CONF.Y_FIELD];\n return v === aggr;\n });\n\n values.push(\n ...data.map((d) => {\n const isAggr = g && g.gemini_id === d.gemini_id;\n\n return {\n ...d,\n isAggr,\n aggr_pos,\n };\n })\n );\n },\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = all_groups.map((group, i) => {\n const n = all_groups.length;\n return {\n transform: [{ filter: group.filter }],\n name: `rule_${group.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? group.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? group.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: hasFacet ? \"aggr_pos\" : CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: minOrMax,\n axis: null,\n scale: { domain },\n },\n },\n };\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values: values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Configuration for custom animations.\n * When meta.custom_animation is present, \n * it looks up a function here and generates custom animation specifications\n */\nexport const CustomAnimations = {\n /**\n * steps:\n * 1) stack sets\n * 2) put rules (lines) using aggregate count\n * 3) replace with count bubbles (aggregate count) (basically target spec)\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n count: async (rawSource, target) => {\n const stacks = await getGridSpec(rawSource, 10, true);\n delete stacks.encoding.y.axis;\n const rules = getCountStep(rawSource, target, false);\n const pullUp = getCountStep(rawSource, target, true);\n return [stacks, rules, pullUp, target];\n },\n /**\n * min animation steps:\n * 1) source spec\n * 2) stack sets, with a rule line at min circle\n * 3) pull circles down\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n min: (rawSource, target) => {\n const step_1 = getMinMaxStep(rawSource, target, \"min\");\n\n const step_2 = {\n ...step_1,\n transform: [{ filter: \"datum.isAggr === true\" }],\n layer: [\n {\n ...step_1.layer[0],\n encoding: {\n ...step_1.layer[0].encoding,\n y: {\n ...step_1.layer[0].encoding.y,\n aggregate: \"min\",\n },\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n\n return [rawSource, step_1, step_2, target];\n },\n /**\n * max animation steps:\n * 1) source spec\n * 2) stack sets, with a rule line at max circle\n * 3) pull circles up\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n max: (rawSource, target, source) => {\n const step_1 = getMinMaxStep(rawSource, target, \"max\");\n\n const step_2 = {\n ...step_1,\n transform: [{ filter: \"datum.isAggr === true\" }],\n layer: [\n {\n ...step_1.layer[0],\n encoding: {\n ...step_1.layer[0].encoding,\n y: {\n ...step_1.layer[0].encoding.y,\n aggregate: \"max\",\n },\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n\n return [rawSource, step_1, step_2, target];\n },\n /**\n * mean animation steps:\n * 1) source spec\n * 2) intermediate: circles will be placed diagonally \"/\" \n * 3) add lines (rules) at mean level\n * 4) convert circles to small ticks\n * 5) show vertical lines\n * 6) collapse the lines to mean level\n * 7) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n mean: (rawSource, target) => {\n const step_1 = getMeanStep(rawSource, target);\n\n const barWidth = 2;\n\n const step_2 = {\n ...step_1,\n layer: [\n {\n name: \"main\",\n mark: { type: \"tick\", orient: \"horizontal\", width: barWidth },\n encoding: {\n y: {\n ...rawSource.encoding.y,\n },\n x: {\n ...rawSource.encoding.x,\n field: CONF.X_FIELD + \"_pos_start\",\n },\n x2: {\n field: CONF.X_FIELD + \"_pos_end\",\n },\n color: rawSource.encoding.color\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n const step_3 = {\n ...step_2,\n layer: [\n {\n ...step_2.layer[0],\n mark: {\n type: \"bar\",\n width: barWidth,\n },\n encoding: {\n ...step_2.layer[0].encoding,\n y2: {\n field: \"y_mean_pos\",\n },\n },\n },\n ...step_2.layer.slice(1),\n ],\n };\n const step_4 = {\n ...step_2,\n layer: [\n {\n ...step_2.layer[0],\n mark: {\n type: \"bar\",\n width: barWidth,\n },\n encoding: {\n ...step_2.layer[0].encoding,\n y: {\n ...step_2.layer[0].encoding.y,\n field: \"y_mean_pos\",\n },\n y2: {\n field: \"y_mean_pos\",\n },\n },\n },\n ...step_2.layer.slice(1),\n ],\n };\n\n const intermediate = {\n ...rawSource,\n data: {\n values: step_1.data.values,\n },\n encoding: {\n ...rawSource.encoding,\n x: {\n ...rawSource.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n },\n };\n\n return [rawSource, intermediate, step_1, step_2, step_3, step_4, target];\n },\n /**\n * median and quantile animation steps:\n * 1) source spec\n * 2) show rules at the top and bottom\n * 3) split circles by median and move to the right and left and move rules to median level\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n median: (rawSource, target, calculatedSource, p) => {\n const percent = (p === undefined || p === null) ? 0.5 : p;\n const initial = getMedianStep(rawSource, target, 0, percent);\n const last_with_points = getMedianStep(rawSource, target, null, percent);\n\n return [\n rawSource,\n initial,\n last_with_points,\n target\n ];\n },\n};\n","/**\n * Hack faceted view since gemini.js does not support multi view animations\n * Finding coordinates of each circle and treat them as real values in the one axis view \n * Adding axis layer underneath to look exactly same as faceted view\n */\n\nimport { CONF, META_PARSE_VALUES } from \"./config.js\";\n\n/**\n * Get empty spec, if no data is present\n * @param {Object} spec \n * @returns vega-lite spec\n */\nexport function getEmptySpec(spec) {\n const description = spec.meta.description;\n const splitField = spec.meta.splitField;\n\n return {\n $scheme: CONF.SCHEME,\n width: 300,\n height: 300,\n meta: {\n description,\n axes: false,\n },\n data: {\n values: [\n {\n [CONF.X_FIELD]: 0,\n [CONF.Y_FIELD]: 0,\n },\n ],\n },\n mark: {\n type: \"point\",\n filled: true,\n strokeWidth: 1,\n color: \"transparent\",\n },\n encoding: {\n x: {\n field: CONF.X_FIELD,\n type: \"quantitative\",\n scale: {\n domain: [-5, 5],\n },\n axis: {\n grid: false,\n ticks: false,\n title: splitField,\n domain: false,\n values: [],\n },\n },\n y: {\n field: CONF.Y_FIELD,\n type: \"quantitative\",\n scale: {\n domain: [-5, 5],\n },\n axis: {\n grid: false,\n ticks: false,\n title: null,\n domain: false,\n values: [],\n },\n },\n },\n };\n}\n\n/**\n * Creates and returns a template for vega spec\n * @param {Number} width spec width\n * @param {Number} height spec height\n * @param {Object} axes which axes to add\n * @param {Object} spec original spec\n * @returns vega-lite spec\n */\nexport function getSpecTemplate(width, height, axes = { x: true, y: true }, spec) {\n const encoding = spec.spec.encoding;\n const mark = spec.spec.mark;\n const facet = spec.facet;\n\n if (encoding.x) {\n const title = facet && facet.column ? facet.column.title : null;\n\n encoding.x = {\n field: CONF.X_FIELD,\n type: \"quantitative\",\n scale: {},\n axis: axes.x\n ? {\n labelExpr: \"\",\n values: [],\n title: title,\n grid: false,\n orient: \"top\",\n ticks: false,\n domain: false,\n labelPadding: 10,\n }\n : null,\n };\n }\n\n if (encoding.y) {\n const title = facet && facet.row ? facet.row.title : null;\n\n encoding.y = {\n field: spec.spec.mark === \"errorbar\" ? encoding.y.field : CONF.Y_FIELD,\n type: \"quantitative\",\n scale: {},\n axis: axes.y\n ? {\n labelExpr: \"\",\n values: [],\n title: title,\n grid: false,\n labelAngle: 90,\n domain: false,\n ticks: false,\n labelPadding: 10,\n orient: \"right\",\n }\n : null,\n };\n }\n\n const additionals = {};\n\n if (spec.transform) {\n additionals.transform = spec.transform;\n }\n\n return {\n $schema: CONF.SCHEME,\n data: {\n values: [],\n },\n width: width,\n height: height,\n mark: mark,\n encoding: encoding,\n ...additionals,\n };\n}\n\n/**\n * Get hacked spec\n * Finding coordinates of each circle and treat them as real values in the one axis view \n * Adding axis layer underneath to look exactly same as faceted view\n * @param {Object} param0 parameters\n * @param {Object} param0.view a vega view instance\n * @param {Object} param0.spec a vega spec\n * @param {Object} param0.width spec width\n * @param {Object} param0.height spec height\n * @returns vega-lite spec\n */\nexport function getHackedSpec({ view, spec, width = 600, height = 600 }) {\n const rowId = spec.facet.row ? spec.facet.row.field : null;\n const colId = spec.facet.column ? spec.facet.column.field : null;\n\n const newSpec = getSpecTemplate(\n width,\n height,\n {\n x: colId,\n y: rowId,\n },\n spec\n );\n\n const yDomain = [height, 0];\n const xDomain = [0, width];\n\n const values = [];\n\n const colMap = new Map();\n const rowMap = new Map();\n\n const scaleX = view.scale(\"x\");\n const scaleY = view.scale(\"y\");\n const source = view.data(\"source\");\n\n let row_header, column_header;\n\n // y axis\n if (rowId && (row_header = view.data(\"row_header\"))) {\n const yAxisValues = [];\n const yAxisExpr = {};\n\n row_header.forEach((d, i) => {\n const bounds = d.bounds;\n const name = d.datum[rowId];\n const y1 = bounds.y1;\n const y2 = bounds.y2;\n\n rowMap.set(name, y1);\n\n const yCoord = Math.round(y1 + (y2 - y1) / 2);\n\n yAxisValues.push(yCoord);\n yAxisExpr[yCoord] = name;\n });\n\n yDomain[1] = d3.min(row_header, (d) => d.bounds.y1);\n yDomain[0] = d3.max(row_header, (d) => d.bounds.y2);\n\n newSpec.encoding.y.axis.values = yAxisValues;\n newSpec.encoding.y.axis.labelExpr = `${JSON.stringify(\n yAxisExpr\n )}[datum.label]`;\n }\n\n // x axis\n if (colId && (column_header = view.data(\"column_header\"))) {\n const xAxisValues = [];\n const xAxisExpr = {};\n\n column_header.forEach((d, i) => {\n const bounds = d.bounds;\n\n const name = d.datum[colId];\n colMap.set(name, bounds.x1);\n\n const xCoord = Math.round(bounds.x1 + (bounds.x2 - bounds.x1) / 2);\n\n xAxisValues.push(xCoord);\n xAxisExpr[xCoord] = name;\n });\n\n xDomain[0] = d3.min(column_header, (d) => d.bounds.x1);\n xDomain[1] = d3.max(column_header, (d) => d.bounds.x2);\n\n newSpec.encoding.x.axis.values = xAxisValues;\n newSpec.encoding.x.axis.labelExpr = `${JSON.stringify(\n xAxisExpr\n )}[datum.label]`;\n }\n\n // generating data.values\n source.forEach((d) => {\n const col = d[colId];\n const row = d[rowId];\n\n const xStart = colMap.get(col) || 0;\n const yStart = rowMap.get(row) || 0;\n\n const xField = spec.meta.parse === META_PARSE_VALUES.jitter ? \"x\" : CONF.X_FIELD;\n const yField = spec.meta.parse === META_PARSE_VALUES.jitter ? \"y\" : CONF.Y_FIELD;\n\n const xCoord = xStart + scaleX(d[xField]);\n\n values.push({\n ...d,\n [CONF.X_FIELD]: xCoord,\n [CONF.Y_FIELD]: yStart + scaleY(d[yField]),\n [CONF.X_FIELD + \"_num\"]: d.scaledX ? xStart + scaleX(d.scaledX) : xCoord,\n scaleX: (val) => yStart + scaleX(val),\n scaleY: (val) => yStart + scaleY(val),\n });\n });\n\n newSpec.encoding.x.scale.domain = xDomain;\n newSpec.encoding.y.scale.domain = yDomain;\n newSpec.data.values = values;\n newSpec.width = xDomain[1] - xDomain[0];\n newSpec.height = yDomain[0] - yDomain[1];\n\n return newSpec;\n}\n\n/**\n * turns faceted spec to regular spec, using hacking technique\n * @param {Object} spec vega lite spec with facets\n * @returns vega-lite spec\n */\nexport function hackFacet(spec) {\n const div = document.createElement(\"div\");\n\n spec.data.name = \"source\";\n\n return vegaEmbed(div, spec, { renderer: \"svg\" }).then((resp) => {\n const newSpec = getHackedSpec({\n ...resp,\n width: spec.spec.width,\n height: spec.spec.height,\n });\n\n if (spec.config) {\n newSpec.config = spec.config;\n }\n\n if (spec.meta) {\n newSpec.meta = spec.meta;\n }\n\n let [transformX, transformY] = resp.view._origin;\n\n if (!(spec.facet && spec.facet.row && !spec.facet.column)) {\n transformY = 0;\n }\n\n if (newSpec.meta) {\n newSpec.meta.transformX = transformX;\n newSpec.meta.transformY = transformY;\n } else {\n newSpec.meta = { transformX, transformY };\n }\n\n return newSpec;\n });\n}\n","/**\n * Entry point of Datamations JavaScript code\n * Reads vega-lite specifications, converts to vega specs and animates them\n *\n * ### Dependencies:\n * - gemini: https://github.com/uwdata/gemini\n * - vega-lite: https://vega.github.io/vega-lite/\n * - vega: https://vega.github.io/vega/\n * - vega-embed: https://github.com/vega/vega-embed\n * - d3: https://d3js.org/\n * - gifshot: https://github.com/yahoo/gifshot\n * - html2canvas: https://html2canvas.hertzen.com/\n * - download2: http://danml.com/download.html\n */\n\nimport { CONF, META_PARSE_VALUES } from \"./config.js\";\nimport { getSelectors, splitLayers, getRows } from \"./utils.js\";\nimport { hackFacet, getEmptySpec } from \"./hack-facet-view.js\";\nimport { getGridSpec, getJitterSpec } from \"./layout.js\";\nimport { CustomAnimations } from \"./custom-animations.js\";\n\n/**\n *\n * @param {String} id conteiner id\n * @param {Object} param1 configuration object\n * @param {Array} param1.specs list of vega-lite specifications\n * @param {Boolean} param1.autoPlay autoPlay\n * @param {Number} param1.frameDel frame duration (in ms.)\n * @param {Number} param1.frameDel delay between frames (in ms.)\n * @returns an object of exposed functions\n */\nexport default function App(id, { specs, autoPlay = false, frameDur, frameDel }) {\n let rawSpecsImmutable; // saving passed specs here, not changed by reference\n let rawSpecs; // holds raw vega-lite specs, not transformed\n let vegaLiteSpecs;\n let vegaSpecs; // vega specs\n let frames;\n let metas;\n let frameIndex = 0;\n let timeoutId;\n let playing = false;\n let initializing = false;\n let frameDuration = frameDur || 2000;\n let frameDelay = frameDel || 1000;\n\n // a fallback gemini spec in case gemini.animate could not recommend anything\n const gemSpec = {\n timeline: {\n concat: [\n {\n sync: [\n {\n component: {\n mark: \"marks\",\n },\n change: {\n data: {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: false,\n },\n encode: {\n update: true,\n enter: true,\n exit: true,\n },\n },\n timing: {\n duration: {\n ratio: 1,\n },\n },\n },\n ],\n },\n ],\n },\n totalDuration: frameDuration,\n };\n\n /**\n * Resets all the instance variables to be able to re-run animation\n */\n const reset = () => {\n vegaLiteSpecs = [];\n vegaSpecs = [];\n rawSpecs = [];\n rawSpecsImmutable = [];\n frames = [];\n metas = [];\n frameIndex = 0;\n playing = false;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n /**\n * Initializes datamation app\n */\n async function init() {\n // ignore all subsequent init calls.\n if (initializing) return;\n initializing = true;\n\n const { slider } = getSelectors(id);\n\n reset();\n\n // load or set data\n if (specs) {\n vegaLiteSpecs = JSON.parse(JSON.stringify(specs));\n }\n\n // save raw specs to use for facet axes drawing\n vegaLiteSpecs.forEach((d) => {\n rawSpecs.push(JSON.parse(JSON.stringify(d)));\n rawSpecsImmutable.push(JSON.parse(JSON.stringify(d)));\n\n if (d.meta) {\n metas.push(d.meta);\n }\n });\n\n d3.select(slider).property(\"max\", vegaLiteSpecs.length - 1);\n\n // parse, jitter, layer splitting\n await transformSpecs();\n\n // compile to vega\n toVegaSpecs();\n\n // create frames for animation\n await makeFrames();\n\n drawSpec(0);\n\n if (autoPlay) {\n setTimeout(play, 100);\n }\n\n initializing = false;\n }\n\n /**\n * Plays animation\n */\n function play(cb = () => {}) {\n playing = true;\n frameIndex = 0;\n\n const tick = () => {\n animateFrame(frameIndex, cb).then(() => {\n if (playing) {\n frameIndex++; // next frame\n\n if (frames[frameIndex]) {\n tick();\n } else {\n playing = false;\n disableEnable(\"enable\");\n }\n }\n });\n\n if (typeof HTMLWidgets !== \"undefined\" && HTMLWidgets.shinyMode) {\n var prevIndex = frameIndex - 1;\n Shiny.onInputChange(\"slider_state\", prevIndex);\n }\n };\n\n disableEnable(\"disable\");\n tick();\n }\n\n /**\n * Draws vega lite spec statically (without transition), also updates slider, description, show/hides some layers\n * @param {Number} index specification index in vegaLiteSpecs\n * @param {Object} vegaSpec source vega spec of current frame\n * @returns a promise of vegaEmbed\n */\n function drawSpec(index, vegaSpec) {\n let spec = vegaLiteSpecs[index];\n\n if (!spec) return;\n\n if (spec.custom) {\n spec = gemini.vl2vg4gemini(spec.sequence[spec.sequence.length - 1]);\n }\n\n const meta = metas[index];\n\n const {\n axisSelector,\n visSelector,\n descr,\n slider,\n otherLayers,\n controls,\n exportWrap,\n } = getSelectors(id);\n\n d3.select(slider).property(\"value\", index);\n d3.select(descr).html(meta.description || \"frame \" + index);\n d3.select(axisSelector)\n .style(\"opacity\", meta.axes ? 1 : 0)\n .html(\"\");\n d3.select(visSelector).classed(\"with-axes\", meta.axes);\n d3.select(otherLayers).classed(\"with-axes\", meta.axes);\n\n // draw axis\n if (meta.axes) {\n drawAxis(index);\n }\n\n const transformX = meta.transformX || 0;\n const transformY = meta.transformY || 0;\n\n // shift vis\n d3.select(visSelector)\n .style(\"left\", transformX + \"px\")\n .style(\"top\", transformY + \"px\");\n\n const _width = spec.width + transformX + 10;\n d3.select(controls).style(\"width\", _width + \"px\");\n d3.select(descr).style(\"width\", _width + \"px\");\n\n // draw vis\n return drawChart(spec, vegaSpec && vegaSpec.custom ? null : vegaSpec);\n }\n\n /**\n * Draws a chart, either spec or vegaSpec (which is passed from animate function)\n * Supports single view as well as multiple view chart\n * @param {Object} spec vega-lite spec\n * @param {Object} vegaSpec source vega spec of current frame\n * @returns a promise of vegaEmbed\n */\n function drawChart(spec, vegaSpec) {\n const { visSelector, otherLayers } = getSelectors(id);\n const layers = document.querySelector(otherLayers);\n layers.innerHTML = \"\";\n\n if (Array.isArray(spec)) {\n return new Promise((res) => {\n spec.forEach((s, i) => {\n let target,\n embedSpec = s;\n\n if (s.meta.animated) {\n target = visSelector;\n if (vegaSpec) {\n embedSpec = vegaSpec;\n }\n } else {\n const div = document.createElement(\"div\");\n div.classList.add(\"vega-hidden-layer\");\n layers.appendChild(div);\n target = div;\n }\n\n vegaEmbed(target, embedSpec, { renderer: \"svg\" }).then(() => {\n if (i === spec.length - 1) {\n res();\n }\n\n // ensure facet translations match in axisSelector and otherLayers\n setTimeout(() => {\n adjustAxisAndErrorbars();\n }, 100);\n });\n });\n });\n } else {\n return vegaEmbed(visSelector, vegaSpec || spec, { renderer: \"svg\" });\n }\n }\n\n /**\n * Fixes hacked axis spec and error bar alignment\n */\n function adjustAxisAndErrorbars() {\n const { axisSelector, otherLayers } = getSelectors(id);\n const axisCells = d3\n .select(axisSelector)\n .selectAll(\".mark-group.cell>g\")\n .nodes();\n const otherLayersCells = d3\n .select(otherLayers)\n .selectAll(\".mark-group.cell>g\")\n .nodes();\n\n if (axisCells.length === otherLayersCells.length) {\n for (let i = 0; i < axisCells.length; i++) {\n const transform = axisCells[i].getAttribute(\"transform\");\n otherLayersCells[i].setAttribute(\"transform\", transform);\n }\n }\n }\n\n /**\n * Draws an axis layer. This is called when meta.axes = true.\n * @param {Number} index specification index in vegaLiteSpecs\n * @returns a promise of vegaEmbed\n */\n function drawAxis(index) {\n let spec = rawSpecs[index];\n\n if (spec.spec && spec.spec.layer) {\n const split = splitLayers(spec);\n spec = split[1];\n }\n\n const columnFacet = spec.facet && spec.facet.column;\n const { axisSelector, controls, descr, otherLayers } = getSelectors(id);\n\n // update axis domain to matched hacked facet view\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n\n if (!encoding.y.scale) {\n const extentY = d3.extent(spec.data.values, (d) => d[CONF.Y_FIELD]);\n encoding.y.scale = { domain: extentY };\n }\n\n if (encoding.color) {\n encoding.color.legend = null;\n }\n\n if (encoding.fill) {\n encoding.fill.legend = null;\n }\n\n if (encoding.x && encoding.x.axis) {\n encoding.x.axis.labelAngle = -90;\n encoding.x.axis.titleOpacity = 0;\n }\n\n return vegaEmbed(axisSelector, spec, { renderer: \"svg\" }).then(() => {\n if (columnFacet && columnFacet.title) {\n const fn = function () {\n const transform = d3.select(this).attr(\"transform\");\n const x = transform.split(\"(\")[1].split(\",\")[0];\n return `translate(${x}, 40)`;\n };\n\n d3.select(axisSelector + \" svg > g\").attr(\"transform\", fn);\n d3.select(otherLayers + \" svg > g\").attr(\"transform\", fn);\n }\n const width = d3\n .select(axisSelector)\n .node()\n .getBoundingClientRect().width;\n d3.select(controls).style(\"width\", width + \"px\");\n d3.select(descr).style(\"width\", width + \"px\");\n });\n }\n\n /**\n * Animates a frame, from source to target vega specification using gemini\n * @param {Number} index specification index in vegaLiteSpecs\n * @param {Function} cb callback function of each frame drawal\n * @returns a promise of gemini.animate\n */\n async function animateFrame(index, cb) {\n if (!frames[index]) return;\n\n console.log(\"animating frame\", index);\n\n const { axisSelector, visSelector, otherLayers, descr, slider, controls } =\n getSelectors(id);\n\n let { source, target, gemSpec, prevMeta, currMeta } = frames[index];\n let anim = null;\n\n if (source.custom) {\n const _source_spec = gemini.vl2vg4gemini(\n source.sequence[source.sequence.length - 1]\n );\n anim = await gemini.animate(_source_spec, target, gemSpec);\n } else if (target.custom) {\n anim = await gemini.animateSequence(target.sequence, gemSpec);\n } else {\n anim = await gemini.animate(source, target, gemSpec);\n }\n\n let currHasAxes = currMeta.axes;\n let width = target.width;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n // initial frame\n if (index === 0 && cb) cb(0);\n\n return new Promise((res) => {\n drawSpec(index, source).then(() => {\n timeoutId = setTimeout(() => {\n d3.select(descr).html(currMeta.description);\n anim.play(visSelector).then(() => {\n d3.select(slider).property(\"value\", index + 1);\n cb && cb(index + 1);\n res();\n });\n\n const transformX = currMeta.transformX || 0;\n const transformY = currMeta.transformY || 0;\n\n d3.select(visSelector)\n .transition()\n .duration(750)\n .style(\"left\", transformX + \"px\")\n .style(\"top\", transformY + \"px\");\n\n // show/hide axis vega chart\n if (currHasAxes) {\n drawAxis(index + 1);\n d3.select(axisSelector)\n .transition()\n .duration(1000)\n .style(\"opacity\", 1);\n d3.select(visSelector).classed(\"with-axes\", true);\n d3.select(otherLayers).classed(\"with-axes\", true);\n } else {\n d3.select(axisSelector)\n .transition()\n .duration(1000)\n .style(\"opacity\", 0);\n d3.select(visSelector).classed(\"with-axes\", false);\n d3.select(otherLayers).classed(\"with-axes\", false);\n d3.select(controls).style(\"width\", width + transformX + 10 + \"px\");\n d3.select(descr).style(\"width\", width + transformX + 10 + \"px\");\n }\n\n const nextSpec = vegaLiteSpecs[index + 1];\n\n if (nextSpec && Array.isArray(nextSpec)) {\n const statics = nextSpec.filter((d) => !d.meta.animated);\n\n d3.select(otherLayers)\n .html(\"\")\n .style(\"opacity\", 0)\n .transition()\n // .delay(frameDuration / 3)\n .duration(frameDuration / 2)\n .style(\"opacity\", 1);\n\n statics.forEach((s) => {\n const div = document.createElement(\"div\");\n div.classList.add(\"vega-hidden-layer\");\n vegaEmbed(div, s, { renderer: \"svg\" }).then(() => {\n adjustAxisAndErrorbars();\n });\n document.querySelector(otherLayers).appendChild(div);\n });\n } \n }, \n // removed delay between frames for custom animations\n target.custom ? 0 : frameDelay);\n });\n });\n }\n\n /**\n * Transforms specifications into proper format:\n * - meta.grid = generates infogrid\n * - meta.jitter = jitters data using d3.forceCollide\n * - meta.custom_animation = handles custom animation type\n * - spec.layer = splits layers to stack on top on each other\n */\n async function transformSpecs() {\n const rows = getRows(vegaLiteSpecs);\n\n for (let i = 0; i < vegaLiteSpecs.length; i++) {\n let vlSpec = vegaLiteSpecs[i];\n\n if (Array.isArray(vlSpec)) continue; // just sanity check, making sure that it is not an array\n\n // if filter has empty `oneOf`, then generate empty spec and avoid any further processing\n if (\n vlSpec.transform &&\n vlSpec.transform[0].filter &&\n vlSpec.transform[0].filter.oneOf &&\n vlSpec.transform[0].filter.oneOf.length === 0\n ) {\n const emptySpec = getEmptySpec(vlSpec);\n\n metas[i] = emptySpec.meta;\n rawSpecs[i] = emptySpec;\n vlSpec = emptySpec;\n vegaLiteSpecs[i] = emptySpec;\n continue;\n }\n\n const meta = vlSpec.meta;\n const parse = meta.parse;\n\n // parsing\n\n if (meta.custom_animation) {\n let funName = meta.custom_animation;\n let p = null;\n\n // handle quantile\n if (\n Array.isArray(meta.custom_animation) &&\n meta.custom_animation[0] === \"quantile\"\n ) {\n p = meta.custom_animation[1];\n funName = \"median\";\n }\n\n let source = {\n ...rawSpecs[i - 1],\n data: rawSpecsImmutable[i - 1].data,\n };\n let target = vlSpec;\n\n if (rawSpecsImmutable[i - 1].facet) {\n source = {\n ...vegaLiteSpecs[i - 1],\n meta: {\n ...vegaLiteSpecs[i - 1].meta,\n hasFacet: true,\n columnFacet: rawSpecsImmutable[i - 1].facet.column,\n rowFacet: rawSpecsImmutable[i - 1].facet.row,\n },\n data: {\n values: vegaLiteSpecs[i - 1].data.values.map((d) => {\n return {\n ...d,\n [CONF.X_FIELD]: d[CONF.X_FIELD + \"_num\"],\n };\n }),\n },\n };\n }\n\n // if custom animations have facets, fake them before passing to CustomAnimation\n if (vegaLiteSpecs[i].facet) {\n const newSpecTarget = await hackFacet(vegaLiteSpecs[i]);\n vegaLiteSpecs[i] = newSpecTarget;\n target = newSpecTarget;\n }\n\n const fn = CustomAnimations[funName];\n\n if (fn) {\n const sequence = await fn(source, target, vegaLiteSpecs[i - 1], p);\n vegaLiteSpecs[i] = {\n custom: meta.custom_animation,\n sequence,\n };\n }\n } else if (parse === META_PARSE_VALUES.grid) {\n const gridSpec = await getGridSpec(vlSpec, rows);\n\n const enc = gridSpec.spec ? gridSpec.spec.encoding : gridSpec.encoding;\n rawSpecs[i].data.values = gridSpec.data.values;\n\n // update domain for raw spec axis layer\n if (rawSpecs[i].meta.axes && rawSpecs[i].meta.splitField) {\n const encoding = rawSpecs[i].spec\n ? rawSpecs[i].spec.encoding\n : rawSpecs[i].encoding;\n\n encoding.x.axis = enc.x.axis;\n encoding.y.scale = {\n domain: enc.y.scale.domain,\n };\n encoding.x.scale = {\n domain: enc.x.scale.domain,\n };\n }\n\n vegaLiteSpecs[i] = gridSpec;\n } \n else if (parse === META_PARSE_VALUES.jitter) {\n vegaLiteSpecs[i] = await getJitterSpec(vlSpec);\n } \n // since gemini does not support multiple multiple axis transitions, \n // we must split the layers and draw as separate vega spec\n else if (vlSpec.layer || (vlSpec.spec && vlSpec.spec.layer)) {\n const arr = splitLayers(vlSpec);\n\n vegaLiteSpecs[i] = [];\n\n for (let j = 0; j < arr.length; j++) {\n const s = arr[j];\n\n // fake facets\n if (s.facet && s.spec && s.meta.animated) {\n const newSpec = await hackFacet(s);\n vegaLiteSpecs[i].push(newSpec);\n metas[i] = newSpec.meta;\n } else {\n vegaLiteSpecs[i].push(s);\n }\n }\n }\n\n if (vegaLiteSpecs[i]) {\n const facet = vegaLiteSpecs[i].facet;\n const spec = vegaLiteSpecs[i].spec;\n\n // fake facets\n if (facet && spec) {\n const newSpec = await hackFacet(vegaLiteSpecs[i]);\n vegaLiteSpecs[i] = newSpec;\n }\n }\n }\n\n console.log(\"parsed specs:\", vegaLiteSpecs);\n }\n\n /**\n * Converts vega-lite specs to vega specs using vl2vg4gemini (https://github.com/uwdata/gemini#vl2vg4gemini)\n */\n function toVegaSpecs() {\n vegaSpecs = vegaLiteSpecs.map((d) => {\n if (d.custom) {\n return d;\n }\n\n const s = Array.isArray(d) ? d.find((d) => d.meta.animated) : d;\n return gemini.vl2vg4gemini(s);\n });\n }\n\n /**\n * Generates animation frames\n * @returns array of objects of \\{ source, target, gemSpec, prevMeta, currMeta \\}\n */\n async function makeFrames() {\n const options = {\n stageN: 1,\n\n scales: {\n x: {\n domainDimension: \"diff\",\n },\n y: {\n domainDimension: \"diff\",\n },\n },\n\n marks: {\n marks: {\n change: {\n scale: [\"x\", \"y\"],\n data: {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: true,\n },\n encode: {\n update: true,\n enter: true,\n exit: true,\n },\n },\n },\n },\n totalDuration: frameDuration,\n };\n\n for (let i = 1; i < vegaSpecs.length; i++) {\n const prev = vegaSpecs[i - 1];\n const curr = vegaSpecs[i];\n\n const prevMeta = metas[i - 1];\n const currMeta = metas[i];\n\n try {\n let resp = null;\n\n if (curr.custom) {\n resp = await gemini.recommendForSeq(curr.sequence, {\n ...options,\n stageN: curr.sequence.length - 1,\n totalDuration: frameDuration * 2,\n });\n\n const _gemSpec = resp[0].specs.map((d) => d.spec);\n\n // make sure to add gemini_id to data change.\n // gemini recommend does not add it by itself.\n _gemSpec.forEach((d) => {\n if (d.timeline.concat.length) {\n const first = d.timeline.concat[0].sync[0];\n if (first && first.change && first.change.data) {\n first.change.data = {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: true,\n };\n }\n }\n });\n\n frames.push({\n source: prev,\n target: curr,\n gemSpec: _gemSpec,\n prevMeta,\n currMeta,\n });\n } else {\n resp = await gemini.recommend(\n prev.custom\n ? gemini.vl2vg4gemini(prev.sequence[prev.sequence.length - 1])\n : prev,\n curr,\n options\n );\n\n const _gemSpec = resp[0] ? resp[0].spec : gemSpec;\n const sync = _gemSpec.timeline.concat[0].sync;\n\n if (!sync.some((d) => d.component === \"view\")) {\n sync.push({\n component: \"view\",\n change: {\n signal: [\"width\", \"height\"],\n },\n timing: {\n duration: {\n ratio: 1,\n },\n },\n });\n }\n\n frames.push({\n source: prev,\n target: curr,\n gemSpec: _gemSpec,\n prevMeta,\n currMeta,\n });\n }\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n /**\n * Slider on change callback\n */\n function onSlide() {\n playing = false;\n disableEnable(\"enable\");\n const { slider } = getSelectors(id);\n const index = document.querySelector(slider).value;\n drawSpec(index);\n }\n\n /**\n * Exports png files for each frame\n */\n function exportPNG() {\n const { exportWrap } = getSelectors(id);\n\n const pngs = [];\n\n const callback = (index) => {\n const done = index >= frames.length;\n\n html2canvas(document.querySelector(exportWrap)).then((canvas) => {\n pngs.push(canvas.toDataURL());\n\n if (done) {\n pngs.forEach((uri, i) => {\n var a = document.createElement(\"a\");\n a.href = uri;\n a.download = `frame-${i + 1}.png`;\n a.click();\n });\n }\n });\n };\n\n play(callback);\n }\n\n /**\n * Exports datamation as gif.\n * @param {Boolean} fromWeb truthy if it is called from webpage, falsy from command line tool\n * @returns either base64 string, or downloads .gif file\n */\n function exportGif(fromWeb) {\n const { exportWrap, exportBtn } = getSelectors(id);\n\n if (fromWeb) {\n loaderOnOff(true);\n disableEnable(\"disable\", { slider: true });\n }\n\n let intervalId,\n images = [];\n\n const startInterval = () => {\n if (intervalId) clearInterval(intervalId);\n\n intervalId = setInterval(() => {\n html2canvas(document.querySelector(exportWrap)).then((canvas) => {\n images.push(canvas.toDataURL());\n });\n }, 16.66666);\n };\n\n let maxWidth = 300;\n let maxHeight = 300;\n\n return new Promise((res) => {\n const callback = (index) => {\n const done = index >= frames.length;\n const bound = document\n .querySelector(exportWrap)\n .getBoundingClientRect();\n\n if (bound.width > maxWidth) maxWidth = bound.width;\n if (bound.height > maxHeight) maxHeight = bound.height;\n\n if (done) {\n intervalId && clearInterval(intervalId);\n\n setTimeout(() => {\n gifshot.createGIF(\n {\n images,\n gifWidth: maxWidth,\n gifHeight: maxHeight,\n frameDuration: 2.5,\n },\n function (obj) {\n if (fromWeb) {\n loaderOnOff(false);\n disableEnable(\"enable\", { slider: true });\n }\n\n if (!obj.error) {\n var image = obj.image;\n\n if (fromWeb) {\n download(image, \"animation.gif\", \"image/gif\");\n }\n res(image);\n } else {\n console.error(\"error creating gif\", obj.errorMsg);\n }\n }\n );\n }, 1000);\n } else {\n intervalId && clearInterval(intervalId);\n setTimeout(startInterval, frameDelay);\n }\n };\n\n play(callback);\n });\n }\n\n /**\n * Disables or enables some components\n * @param {String} cmd \"disable\" or \"enable\"\n * @param {Array} components array of components\n */\n function disableEnable(cmd, components) {\n const { replayBtn, exportBtn, slider } = getSelectors(id);\n const arr = [replayBtn, exportBtn];\n\n if (components && components.slider) {\n arr.push(slider);\n }\n\n arr.forEach((sel) => {\n const el = document.querySelector(sel);\n\n if (cmd == \"disable\") {\n el.setAttribute(\"disabled\", \"disabled\");\n } else {\n el.removeAttribute(\"disabled\");\n }\n });\n }\n\n /**\n * Download button icon adjustment\n * @param {Boolean} loading\n */\n function loaderOnOff(loading) {\n const { exportBtn } = getSelectors(id);\n let className = \"fas fa-download\";\n\n if (loading) {\n className = \"fas fa-spinner spin\";\n }\n\n d3.select(exportBtn).select(\"i\").attr(\"class\", className);\n }\n\n init();\n\n return {\n onSlide,\n play,\n exportPNG,\n exportGif,\n animateFrame,\n getFrames: () => frames,\n };\n}\n"],"names":["undefined"],"mappings":";;;;AAAA,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;;ACAtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,IAAI,UAAU,OAAO,EAAE;AAElC;AACA,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC;AACjC,EAAE,IAAIA,WAAS,CAAC;AAChB,EAAE,IAAI,OAAO,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;AAC3D,EAAE,IAAI,cAAc,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAC;AACxD,EAAE,IAAI,mBAAmB,GAAG,OAAO,CAAC,aAAa,IAAI,iBAAiB,CAAC;AACvE,EAAE,IAAI,iBAAiB,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAC;AACjE;AACA,EAAE,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;AACnC,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE;AACpC,MAAM,KAAK,EAAE,KAAK;AAClB,MAAM,UAAU,EAAE,IAAI;AACtB,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,QAAQ,EAAE,IAAI;AACpB,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AACpB,GAAG;AACH,EAAE,IAAI;AACN;AACA,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACnB,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;AACvC,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC9B,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,SAAS,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;AACrD;AACA,IAAI,IAAI,cAAc,GAAG,OAAO,IAAI,OAAO,CAAC,SAAS,YAAY,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AACjG,IAAI,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AAC5D,IAAI,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AACjD;AACA;AACA;AACA,IAAI,SAAS,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACjE;AACA,IAAI,OAAO,SAAS,CAAC;AACrB,GAAG;AACH,EAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AAClC,IAAI,IAAI;AACR,MAAM,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AACxD,KAAK,CAAC,OAAO,GAAG,EAAE;AAClB,MAAM,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACzC,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,sBAAsB,GAAG,gBAAgB,CAAC;AAChD,EAAE,IAAI,sBAAsB,GAAG,gBAAgB,CAAC;AAChD,EAAE,IAAI,iBAAiB,GAAG,WAAW,CAAC;AACtC,EAAE,IAAI,iBAAiB,GAAG,WAAW,CAAC;AACtC;AACA;AACA;AACA,EAAE,IAAI,gBAAgB,GAAG,EAAE,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,SAAS,GAAG,EAAE;AACzB,EAAE,SAAS,iBAAiB,GAAG,EAAE;AACjC,EAAE,SAAS,0BAA0B,GAAG,EAAE;AAC1C;AACA;AACA;AACA,EAAE,IAAI,iBAAiB,GAAG,EAAE,CAAC;AAC7B,EAAE,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,YAAY;AACxD,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,EAAE,IAAI,uBAAuB,GAAG,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,EAAE,IAAI,uBAAuB;AAC7B,MAAM,uBAAuB,KAAK,EAAE;AACpC,MAAM,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,cAAc,CAAC,EAAE;AAC5D;AACA;AACA,IAAI,iBAAiB,GAAG,uBAAuB,CAAC;AAChD,GAAG;AACH;AACA,EAAE,IAAI,EAAE,GAAG,0BAA0B,CAAC,SAAS;AAC/C,IAAI,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC3D,EAAE,iBAAiB,CAAC,SAAS,GAAG,0BAA0B,CAAC;AAC3D,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,0BAA0B,CAAC,CAAC;AACxD,EAAE,MAAM,CAAC,0BAA0B,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;AACvE,EAAE,iBAAiB,CAAC,WAAW,GAAG,MAAM;AACxC,IAAI,0BAA0B;AAC9B,IAAI,iBAAiB;AACrB,IAAI,mBAAmB;AACvB,GAAG,CAAC;AACJ;AACA;AACA;AACA,EAAE,SAAS,qBAAqB,CAAC,SAAS,EAAE;AAC5C,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;AACzD,MAAM,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,EAAE;AAC9C,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACzC,OAAO,CAAC,CAAC;AACT,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,OAAO,CAAC,mBAAmB,GAAG,SAAS,MAAM,EAAE;AACjD,IAAI,IAAI,IAAI,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,WAAW,CAAC;AAClE,IAAI,OAAO,IAAI;AACf,QAAQ,IAAI,KAAK,iBAAiB;AAClC;AACA;AACA,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,MAAM,mBAAmB;AAC/D,QAAQ,KAAK,CAAC;AACd,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,CAAC,IAAI,GAAG,SAAS,MAAM,EAAE;AAClC,IAAI,IAAI,MAAM,CAAC,cAAc,EAAE;AAC/B,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;AAChE,KAAK,MAAM;AACX,MAAM,MAAM,CAAC,SAAS,GAAG,0BAA0B,CAAC;AACpD,MAAM,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;AAC7D,KAAK;AACL,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACzC,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,GAAG,EAAE;AAChC,IAAI,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAC5B,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE;AACjD,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;AAClD,MAAM,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AAC/D,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AACnC,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,OAAO,MAAM;AACb,QAAQ,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;AAChC,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACjC,QAAQ,IAAI,KAAK;AACjB,YAAY,OAAO,KAAK,KAAK,QAAQ;AACrC,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;AAC3C,UAAU,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE;AACzE,YAAY,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACnD,WAAW,EAAE,SAAS,GAAG,EAAE;AAC3B,YAAY,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAClD,WAAW,CAAC,CAAC;AACb,SAAS;AACT;AACA,QAAQ,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,EAAE;AACnE;AACA;AACA;AACA,UAAU,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;AACnC,UAAU,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1B,SAAS,EAAE,SAAS,KAAK,EAAE;AAC3B;AACA;AACA,UAAU,OAAO,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACzD,SAAS,CAAC,CAAC;AACX,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,eAAe,CAAC;AACxB;AACA,IAAI,SAAS,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;AAClC,MAAM,SAAS,0BAA0B,GAAG;AAC5C,QAAQ,OAAO,IAAI,WAAW,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;AACzD,UAAU,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAC/C,SAAS,CAAC,CAAC;AACX,OAAO;AACP;AACA,MAAM,OAAO,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,eAAe,GAAG,eAAe,CAAC,IAAI;AAC9C,UAAU,0BAA0B;AACpC;AACA;AACA,UAAU,0BAA0B;AACpC,SAAS,GAAG,0BAA0B,EAAE,CAAC;AACzC,KAAK;AACL;AACA;AACA;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,GAAG;AACH;AACA,EAAE,qBAAqB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AACjD,EAAE,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,mBAAmB,EAAE,YAAY;AACnE,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;AACxC;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,KAAK,GAAG,SAAS,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;AAC7E,IAAI,IAAI,WAAW,KAAK,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;AACtD;AACA,IAAI,IAAI,IAAI,GAAG,IAAI,aAAa;AAChC,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC;AAC/C,MAAM,WAAW;AACjB,KAAK,CAAC;AACN;AACA,IAAI,OAAO,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC;AAC/C,QAAQ,IAAI;AACZ,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE;AAC1C,UAAU,OAAO,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1D,SAAS,CAAC,CAAC;AACX,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AACpD,IAAI,IAAI,KAAK,GAAG,sBAAsB,CAAC;AACvC;AACA,IAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE;AACxC,MAAM,IAAI,KAAK,KAAK,iBAAiB,EAAE;AACvC,QAAQ,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;AACxD,OAAO;AACP;AACA,MAAM,IAAI,KAAK,KAAK,iBAAiB,EAAE;AACvC,QAAQ,IAAI,MAAM,KAAK,OAAO,EAAE;AAChC,UAAU,MAAM,GAAG,CAAC;AACpB,SAAS;AACT;AACA;AACA;AACA,QAAQ,OAAO,UAAU,EAAE,CAAC;AAC5B,OAAO;AACP;AACA,MAAM,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAC9B,MAAM,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AACxB;AACA,MAAM,OAAO,IAAI,EAAE;AACnB,QAAQ,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,QAAQ,EAAE;AACtB,UAAU,IAAI,cAAc,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACtE,UAAU,IAAI,cAAc,EAAE;AAC9B,YAAY,IAAI,cAAc,KAAK,gBAAgB,EAAE,SAAS;AAC9D,YAAY,OAAO,cAAc,CAAC;AAClC,WAAW;AACX,SAAS;AACT;AACA,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;AACvC;AACA;AACA,UAAU,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;AACrD;AACA,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;AAC/C,UAAU,IAAI,KAAK,KAAK,sBAAsB,EAAE;AAChD,YAAY,KAAK,GAAG,iBAAiB,CAAC;AACtC,YAAY,MAAM,OAAO,CAAC,GAAG,CAAC;AAC9B,WAAW;AACX;AACA,UAAU,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACjD;AACA,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;AAChD,UAAU,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAChD,SAAS;AACT;AACA,QAAQ,KAAK,GAAG,iBAAiB,CAAC;AAClC;AACA,QAAQ,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACtD,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AACtC;AACA;AACA,UAAU,KAAK,GAAG,OAAO,CAAC,IAAI;AAC9B,cAAc,iBAAiB;AAC/B,cAAc,sBAAsB,CAAC;AACrC;AACA,UAAU,IAAI,MAAM,CAAC,GAAG,KAAK,gBAAgB,EAAE;AAC/C,YAAY,SAAS;AACrB,WAAW;AACX;AACA,UAAU,OAAO;AACjB,YAAY,KAAK,EAAE,MAAM,CAAC,GAAG;AAC7B,YAAY,IAAI,EAAE,OAAO,CAAC,IAAI;AAC9B,WAAW,CAAC;AACZ;AACA,SAAS,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AAC5C,UAAU,KAAK,GAAG,iBAAiB,CAAC;AACpC;AACA;AACA,UAAU,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;AACnC,UAAU,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACnC,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE;AAClD,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACnD,IAAI,IAAI,MAAM,KAAKA,WAAS,EAAE;AAC9B;AACA;AACA,MAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC9B;AACA,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;AACtC;AACA,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACzC;AACA;AACA,UAAU,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;AACpC,UAAU,OAAO,CAAC,GAAG,GAAGA,WAAS,CAAC;AAClC,UAAU,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACjD;AACA,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;AAC1C;AACA;AACA,YAAY,OAAO,gBAAgB,CAAC;AACpC,WAAW;AACX,SAAS;AACT;AACA,QAAQ,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;AACjC,QAAQ,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS;AACnC,UAAU,gDAAgD,CAAC,CAAC;AAC5D,OAAO;AACP;AACA,MAAM,OAAO,gBAAgB,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAClE;AACA,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AACjC,MAAM,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;AAC/B,MAAM,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AAC/B,MAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC9B,MAAM,OAAO,gBAAgB,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;AAC1B;AACA,IAAI,IAAI,EAAE,IAAI,EAAE;AAChB,MAAM,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;AAC/B,MAAM,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;AACtE,MAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC9B,MAAM,OAAO,gBAAgB,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACnB;AACA;AACA,MAAM,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AAChD;AACA;AACA,MAAM,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;AACvC,QAAQ,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAChC,QAAQ,OAAO,CAAC,GAAG,GAAGA,WAAS,CAAC;AAChC,OAAO;AACP;AACA,KAAK,MAAM;AACX;AACA,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL;AACA;AACA;AACA,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC5B,IAAI,OAAO,gBAAgB,CAAC;AAC5B,GAAG;AACH;AACA;AACA;AACA,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC;AAC5B;AACA,EAAE,MAAM,CAAC,EAAE,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW;AACxC,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW;AACpC,IAAI,OAAO,oBAAoB,CAAC;AAChC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,SAAS,YAAY,CAAC,IAAI,EAAE;AAC9B,IAAI,IAAI,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AACpC;AACA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACnB,MAAM,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACnB,MAAM,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjC,MAAM,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,GAAG;AACH;AACA,EAAE,SAAS,aAAa,CAAC,KAAK,EAAE;AAChC,IAAI,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;AACxC,IAAI,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;AAC3B,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC;AACtB,IAAI,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;AAC9B,GAAG;AACH;AACA,EAAE,SAAS,OAAO,CAAC,WAAW,EAAE;AAChC;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3C,IAAI,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,GAAG;AACH;AACA,EAAE,OAAO,CAAC,IAAI,GAAG,SAAS,MAAM,EAAE;AAClC,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;AAClB,IAAI,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;AAC5B,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrB,KAAK;AACL,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;AACnB;AACA;AACA;AACA,IAAI,OAAO,SAAS,IAAI,GAAG;AAC3B,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE;AAC1B,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC7B,QAAQ,IAAI,GAAG,IAAI,MAAM,EAAE;AAC3B,UAAU,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;AAC3B,UAAU,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AAC5B,UAAU,OAAO,IAAI,CAAC;AACtB,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACvB,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,CAAC;AACN,GAAG,CAAC;AACJ;AACA,EAAE,SAAS,MAAM,CAAC,QAAQ,EAAE;AAC5B,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,IAAI,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;AACpD,MAAM,IAAI,cAAc,EAAE;AAC1B,QAAQ,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7C,OAAO;AACP;AACA,MAAM,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;AAC/C,QAAQ,OAAO,QAAQ,CAAC;AACxB,OAAO;AACP;AACA,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACnC,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,IAAI,GAAG;AAC3C,UAAU,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE;AACxC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;AAC1C,cAAc,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACvC,cAAc,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AAChC,cAAc,OAAO,IAAI,CAAC;AAC1B,aAAa;AACb,WAAW;AACX;AACA,UAAU,IAAI,CAAC,KAAK,GAAGA,WAAS,CAAC;AACjC,UAAU,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAC3B;AACA,UAAU,OAAO,IAAI,CAAC;AACtB,SAAS,CAAC;AACV;AACA,QAAQ,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAChC,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAChC,GAAG;AACH,EAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAC1B;AACA,EAAE,SAAS,UAAU,GAAG;AACxB,IAAI,OAAO,EAAE,KAAK,EAAEA,WAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5C,GAAG;AACH;AACA,EAAE,OAAO,CAAC,SAAS,GAAG;AACtB,IAAI,WAAW,EAAE,OAAO;AACxB;AACA,IAAI,KAAK,EAAE,SAAS,aAAa,EAAE;AACnC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACpB,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AACpB;AACA;AACA,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAGA,WAAS,CAAC;AACzC,MAAM,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AACxB,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B;AACA,MAAM,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC3B,MAAM,IAAI,CAAC,GAAG,GAAGA,WAAS,CAAC;AAC3B;AACA,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAC7C;AACA,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1B,QAAQ,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;AAC/B;AACA,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;AACpC,cAAc,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AACrC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AACtC,YAAY,IAAI,CAAC,IAAI,CAAC,GAAGA,WAAS,CAAC;AACnC,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,EAAE,WAAW;AACrB,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACvB;AACA,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzC,MAAM,IAAI,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;AAC5C,MAAM,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;AACvC,QAAQ,MAAM,UAAU,CAAC,GAAG,CAAC;AAC7B,OAAO;AACP;AACA,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC;AACvB,KAAK;AACL;AACA,IAAI,iBAAiB,EAAE,SAAS,SAAS,EAAE;AAC3C,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;AACrB,QAAQ,MAAM,SAAS,CAAC;AACxB,OAAO;AACP;AACA,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC;AACzB,MAAM,SAAS,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE;AACnC,QAAQ,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;AAC9B,QAAQ,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;AAC/B,QAAQ,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;AAC3B;AACA,QAAQ,IAAI,MAAM,EAAE;AACpB;AACA;AACA,UAAU,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AAClC,UAAU,OAAO,CAAC,GAAG,GAAGA,WAAS,CAAC;AAClC,SAAS;AACT;AACA,QAAQ,OAAO,CAAC,EAAE,MAAM,CAAC;AACzB,OAAO;AACP;AACA,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5D,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;AACtC;AACA,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;AACrC;AACA;AACA;AACA,UAAU,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAS;AACT;AACA,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;AACvC,UAAU,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACxD,UAAU,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AAC5D;AACA,UAAU,IAAI,QAAQ,IAAI,UAAU,EAAE;AACtC,YAAY,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC5C,cAAc,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClD,aAAa,MAAM,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;AACrD,cAAc,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC9C,aAAa;AACb;AACA,WAAW,MAAM,IAAI,QAAQ,EAAE;AAC/B,YAAY,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;AAC5C,cAAc,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClD,aAAa;AACb;AACA,WAAW,MAAM,IAAI,UAAU,EAAE;AACjC,YAAY,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;AAC9C,cAAc,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC9C,aAAa;AACb;AACA,WAAW,MAAM;AACjB,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AACtE,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,MAAM,EAAE,SAAS,IAAI,EAAE,GAAG,EAAE;AAChC,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5D,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI;AACrC,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC;AAC5C,YAAY,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;AAC1C,UAAU,IAAI,YAAY,GAAG,KAAK,CAAC;AACnC,UAAU,MAAM;AAChB,SAAS;AACT,OAAO;AACP;AACA,MAAM,IAAI,YAAY;AACtB,WAAW,IAAI,KAAK,OAAO;AAC3B,WAAW,IAAI,KAAK,UAAU,CAAC;AAC/B,UAAU,YAAY,CAAC,MAAM,IAAI,GAAG;AACpC,UAAU,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE;AAC1C;AACA;AACA,QAAQ,YAAY,GAAG,IAAI,CAAC;AAC5B,OAAO;AACP;AACA,MAAM,IAAI,MAAM,GAAG,YAAY,GAAG,YAAY,CAAC,UAAU,GAAG,EAAE,CAAC;AAC/D,MAAM,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB,MAAM,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;AACvB;AACA,MAAM,IAAI,YAAY,EAAE;AACxB,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC;AAC5C,QAAQ,OAAO,gBAAgB,CAAC;AAChC,OAAO;AACP;AACA,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACnC,KAAK;AACL;AACA,IAAI,QAAQ,EAAE,SAAS,MAAM,EAAE,QAAQ,EAAE;AACzC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AACnC,QAAQ,MAAM,MAAM,CAAC,GAAG,CAAC;AACzB,OAAO;AACP;AACA,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;AACjC,UAAU,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AACtC,QAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;AAC/B,OAAO,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC3C,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AAC1C,QAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;AAC/B,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;AAC1B,OAAO,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,EAAE;AACvD,QAAQ,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AAC7B,OAAO;AACP;AACA,MAAM,OAAO,gBAAgB,CAAC;AAC9B,KAAK;AACL;AACA,IAAI,MAAM,EAAE,SAAS,UAAU,EAAE;AACjC,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5D,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE;AAC7C,UAAU,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC1D,UAAU,aAAa,CAAC,KAAK,CAAC,CAAC;AAC/B,UAAU,OAAO,gBAAgB,CAAC;AAClC,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,EAAE,SAAS,MAAM,EAAE;AAC9B,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;AAC5D,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;AACrC,UAAU,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;AACxC,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AACvC,YAAY,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;AACpC,YAAY,aAAa,CAAC,KAAK,CAAC,CAAC;AACjC,WAAW;AACX,UAAU,OAAO,MAAM,CAAC;AACxB,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA,MAAM,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAC/C,KAAK;AACL;AACA,IAAI,aAAa,EAAE,SAAS,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE;AAC3D,MAAM,IAAI,CAAC,QAAQ,GAAG;AACtB,QAAQ,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;AAClC,QAAQ,UAAU,EAAE,UAAU;AAC9B,QAAQ,OAAO,EAAE,OAAO;AACxB,OAAO,CAAC;AACR;AACA,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;AAClC;AACA;AACA,QAAQ,IAAI,CAAC,GAAG,GAAGA,WAAS,CAAC;AAC7B,OAAO;AACP;AACA,MAAM,OAAO,gBAAgB,CAAC;AAC9B,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,OAAO,CAAC;AACjB;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,EAAE,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,CAAC,OAAO,GAAG,EAAE;AAClD,CAAC,CAAC,CAAC;AACH;AACA,IAAI;AACJ,EAAE,kBAAkB,GAAG,OAAO,CAAC;AAC/B,CAAC,CAAC,OAAO,oBAAoB,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACtC,IAAI,UAAU,CAAC,kBAAkB,GAAG,OAAO,CAAC;AAC5C,GAAG,MAAM;AACT,IAAI,QAAQ,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC;AACrD,GAAG;AACH;;ACjvBY,MAAC,IAAI,GAAG;AACpB,EAAE,OAAO,EAAE,eAAe;AAC1B,EAAE,OAAO,EAAE,eAAe;AAC1B,EAAE,WAAW,EAAE,mBAAmB;AAClC,EAAE,MAAM,EAAE,iDAAiD;AAC3D,EAAE;AACF;AACY,MAAC,aAAa,GAAG;AAC7B,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG;AACrB,EAAE,eAAe,EAAE,eAAe;AAClC,EAAE;AACF;AACY,MAAC,iBAAiB,GAAG;AACjC,EAAE,IAAI,EAAE,MAAM;AACd,EAAE,MAAM,EAAE,QAAQ;AAClB;;ACbA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,EAAE,EAAE;AACjC,EAAE,MAAM,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;AACxB;AACA,EAAE,OAAO;AACT,IAAI,YAAY,EAAE,IAAI,GAAG,iBAAiB;AAC1C,IAAI,WAAW,EAAE,IAAI,GAAG,YAAY;AACpC,IAAI,KAAK,EAAE,IAAI,GAAG,eAAe;AACjC,IAAI,MAAM,EAAE,IAAI,GAAG,UAAU;AAC7B,IAAI,WAAW,EAAE,IAAI,GAAG,qBAAqB;AAC7C,IAAI,QAAQ,EAAE,IAAI,GAAG,oBAAoB;AACzC,IAAI,UAAU,EAAE,IAAI,GAAG,kBAAkB;AACzC,IAAI,SAAS,EAAE,IAAI,GAAG,cAAc;AACpC,IAAI,SAAS,EAAE,IAAI,GAAG,cAAc;AACpC,GAAG,CAAC;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,KAAK,EAAE;AACnC,EAAE,MAAM,SAAS,GAAG,EAAE,CAAC;AACvB,EAAE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC1B;AACA,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AACjC,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD;AACA,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE;AACpB,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACrC,OAAO,MAAM;AACb,QAAQ,GAAG,CAAC,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC;AAChC,OAAO;AACP;AACA,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;AACrC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;AAC7B,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,KAAK,CAAC,CAAC;AACP,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE;AAC1B,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAClC,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACpD;AACA,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE;AACpB,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACrC,OAAO,MAAM;AACb,QAAQ,GAAG,CAAC,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC;AAChC,OAAO;AACP;AACA,MAAM,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;AAChC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;AACxB,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC;AACvB,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,OAAO,SAAS,CAAC;AACnB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;AACtD,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,OAAO,CAAC,aAAa,EAAE;AACvC,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC;AAClB;AACA,EAAE,aAAa;AACf,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC;AAC3C,KAAK,OAAO,CAAC,CAAC,IAAI,KAAK;AACvB,MAAM,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;AACvE,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACtE,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9C,MAAM,MAAM,SAAS,GAAG,EAAE,CAAC;AAC3B;AACA,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;AACtB,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC/B,UAAU,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClD,SAAS;AACT,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AAC5B,UAAU,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/C,SAAS;AACT,OAAO;AACP;AACA,MAAM,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACxC;AACA,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC;AACpB,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/B;AACA,MAAM,IAAI,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;AAC/D,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACxC,QAAQ;AACR,UAAU,KAAK,KAAK,UAAU;AAC9B,UAAU,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACzC,UAAU,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzC,UAAU;AACV,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ;AACA;AACA,MAAM,IAAI,UAAU,IAAI,cAAc,EAAE;AACxC,QAAQ,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC;AAC9D,QAAQ,MAAM,IAAI,GAAG,CAAC,GAAG,SAAS,EAAE,UAAU,CAAC,CAAC;AAChD;AACA,QAAQ,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO;AAClC,UAAU,UAAU;AACpB,UAAU,CAAC,GAAG,KAAK;AACnB,YAAY,MAAM,GAAG,GAAG,EAAE,CAAC;AAC3B,YAAY,IAAI,GAAG,GAAG,CAAC,CAAC;AACxB;AACA,YAAY,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAC/B,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB,cAAc,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,GAAG,CAAC;AAC3C,aAAa,CAAC,CAAC;AACf;AACA,YAAY,MAAM,CAAC,GAAG;AACtB,cAAc,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAC9C,cAAc,CAAC,cAAc,GAAG,GAAG;AACnC,cAAc,CAAC,EAAE,GAAG;AACpB,aAAa,CAAC;AACd;AACA,YAAY,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AACrC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,aAAa,CAAC,CAAC;AACf;AACA,YAAY,OAAO,CAAC,CAAC;AACrB,WAAW;AACX,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AAC/B,YAAY,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,WAAW,CAAC;AACZ,SAAS,CAAC;AACV;AACA,QAAQ,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAC5C,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,YAAY,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,WAAW,MAAM;AACjB,YAAY,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,WAAW;AACX,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;AAC/C,OAAO;AACP;AACA,MAAM,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD;AACA,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,MAAM,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AAC3C;AACA;AACA;AACA,MAAM,IAAI,SAAS,GAAG,OAAO,GAAG,CAAC,EAAE;AACnC,QAAQ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;AACjD,OAAO;AACP;AACA,MAAM,IAAI,IAAI,GAAG,OAAO,EAAE;AAC1B,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB,OAAO;AACP,KAAK,CAAC,CAAC;AACP;AACA,EAAE,OAAO,OAAO,CAAC;AACjB;;ACxLA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE;AAC/D,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1C,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAClE,EAAE,MAAM,SAAS,GAAG,EAAE,CAAC;AACvB;AACA,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;AAC7C;AACA,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;AAClB,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC3B,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AAC7D,KAAK;AACL,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AACxB,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3C,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;AAC1D,KAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACpC;AACA,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;AACnB;AACA,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC/B,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC5B,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE;AAChB,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;AACzD,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACpC,IAAI,OAAO,KAAK,KAAK,UAAU;AAC/B,WAAW,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC1C,WAAW,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1C,WAAW,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACR;AACA,EAAE,IAAI,cAAc,GAAG,IAAI,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,UAAU,IAAI,cAAc,EAAE;AACpC,IAAI,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC;AACpD,IAAI,MAAM,IAAI,GAAG,CAAC,GAAG,SAAS,EAAE,UAAU,CAAC,CAAC;AAC5C;AACA,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO;AAC9B,MAAM,UAAU;AAChB,MAAM,GAAG,IAAI;AACb,QAAQ,MAAM,GAAG,GAAG,EAAE,CAAC;AACvB,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC;AACpB;AACA,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI;AACzB,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,UAAU,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,GAAG,CAAC;AACvC,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,MAAM,CAAC,GAAG;AAClB,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAC1C,UAAU,CAAC,cAAc,GAAG,GAAG;AAC/B,UAAU,CAAC,EAAE,GAAG;AAChB,SAAS,CAAC;AACV;AACA,QAAQ,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI;AAC/B,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,OAAO,CAAC,CAAC;AACjB,OAAO;AACP,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AAC3B,QAAQ,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,OAAO,CAAC;AACR,KAAK,CAAC;AACN;AACA,IAAI,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AACxC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,OAAO,MAAM;AACb,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,OAAO;AACP,KAAK,CAAC,CAAC;AACP;AACA,IAAI,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;AAC3C,GAAG;AACH;AACA,EAAE,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/D,EAAE,IAAI,YAAY,GAAG,EAAE,CAAC;AACxB;AACA,EAAE,IAAI,UAAU,EAAE;AAClB,IAAI,YAAY,GAAG,KAAK,CAAC,IAAI;AAC7B,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACnD,MAAK;AACL,GAAG;AACH;AACA,EAAE,IAAI,OAAO,GAAG,CAAC,CAAC;AAClB;AACA,EAAE,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK;AACxB,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;AACnB;AACA,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AACxB,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1C,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/E;AACA,MAAM,IAAI,QAAQ,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;AACjD,MAAM,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC;AACtD;AACA,MAAM,MAAM,KAAK,GAAG,EAAE,CAAC;AACvB;AACA;AACA,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI;AAClC,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,YAAY,EAAE;AAC7C,UAAU,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAS;AACT,OAAO,CAAC,CAAC;AACT;AACA,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAClC,QAAQ,MAAM,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAClD,QAAQ,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACtC,QAAQ,MAAM,aAAa,GAAG,EAAE,CAAC;AACjC;AACA;AACA,QAAQ,IAAI,cAAc,IAAI,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,KAAK,QAAQ,EAAE;AACtE,UAAU,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AACrE,YAAY,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,WAAW,CAAC,CAAC;AACb;AACA,UAAU,aAAa,CAAC,cAAc,CAAC,GAAG,cAAc;AACxD,YAAY,IAAI;AAChB,YAAY,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAY,CAAC,GAAG,CAAC;AACjB,WAAW,CAAC;AACZ,SAAS;AACT;AACA,QAAQ,GAAG,CAAC,IAAI,CAAC;AACjB,UAAU,GAAG,KAAK;AAClB,UAAU,GAAG,aAAa;AAC1B,UAAU,SAAS,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO;AAC7D,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,CAAC;AAC/C,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAC7C,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,OAAO,EAAE,CAAC;AAClB,OAAO;AACP,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,GAAG,CAAC;AACf,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,UAAU,GAAG,EAAE,CAAC;AACtB;AACA,EAAE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AACpC,GAAG,MAAM;AACT,IAAI,UAAU,GAAG,EAAE,CAAC,OAAO;AAC3B,MAAM,UAAU;AAChB,MAAM,MAAM;AACZ,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AAChC,QAAQ,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,OAAO,CAAC;AACR,KAAK;AACL,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK;AACpB,MAAM,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,OAAO,MAAM;AACb,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC;AACzC;AACA,EAAE,OAAO;AACT,IAAI,UAAU;AACd,IAAI,MAAM,EAAE;AACZ,MAAM,CAAC,OAAO,GAAG,CAAC;AAClB,MAAM,CAAC,UAAU,GAAG,OAAO,KAAK,UAAU,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC;AACjE,KAAK;AACL,IAAI,UAAU;AACd,GAAG,CAAC;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE;AAC9D,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK;AAC9B,IAAI,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACvF,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1B,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AACjE;AACA,IAAI,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B;AACA,IAAI,MAAM,OAAO,GAAG,OAAO,IAAI,UAAU,KAAK,CAAC,GAAG;AAClD,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AAC7C,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE;AAC7C,KAAK,GAAG,MAAM,CAAC;AACf;AACA,IAAI,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AAChE;AACA,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ;AACnE,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,IAAI,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1E,KAAK,CAAC;AACN;AACA,IAAI,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9D;AACA,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAC3B;AACA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG;AACvB,MAAM,IAAI,EAAE,QAAQ;AACpB,MAAM,MAAM,EAAE,OAAO;AACrB,KAAK,CAAC;AACN;AACA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG;AACvB,MAAM,IAAI,EAAE,QAAQ;AACpB,MAAM,MAAM,EAAE;AACd,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC;AAC/C,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC;AAC/C,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;AACpC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;AACpC;AACA;AACA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAC9B,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI;AAC/B,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACvD,OAAO,CAAC;AACR;AACA,MAAM,MAAM,IAAI,GAAG,EAAE,CAAC;AACtB;AACA,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAC5B;AACA,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM;AAChC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACrE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,SAAS,CAAC;AACV;AACA,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1E,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACzB,OAAO,CAAC,CAAC;AACT;AACA,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI;AACzD,QAAQ,OAAO;AACf,UAAU,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/D,UAAU,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;AACxC,UAAU,UAAU,EAAE,CAAC;AACvB,SAAS;AACT,OAAO,CAAC,CAAC;AACT;AACA,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG;AACxB,QAAQ,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;AACzD,QAAQ,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C,QAAQ,UAAU,EAAE,CAAC,EAAE;AACvB,QAAQ,IAAI,EAAE,KAAK;AACnB,QAAQ,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;AACnC,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AACpB,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,IAAI,EAAE;AACpC,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAClE,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzD,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC;AACA,EAAE,MAAM,YAAY,GAAG,CAAC,CAAC;AACzB;AACA,EAAE,IAAI,eAAe,GAAG,CAAC,CAAC;AAC1B;AACA,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAC5B,IAAI,eAAe,GAAG,IAAI,GAAG;AAC7B,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7C,KAAK,CAAC,IAAI,CAAC;AACX,GAAG;AACH;AACA,EAAE,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC;AACxC,EAAE,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,EAAE;AAC/B,KAAK,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,CAAC;AAC7C,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC1B,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC;AACvB;AACA,EAAE,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AACrF,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B;AACA,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAC7D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5B;AACA,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B;AACA,IAAI,OAAO;AACX,MAAM,GAAG,CAAC;AACV,MAAM,CAAC,EAAE,CAAC;AACV,MAAM,CAAC,EAAE,CAAC;AACV,KAAK,CAAC;AACN,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,UAAU,GAAG,EAAE;AACvB,KAAK,eAAe,CAAC,GAAG,CAAC;AACzB,KAAK,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,KAAK,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACpE,KAAK,KAAK,CAAC,SAAS,EAAE,EAAE;AACxB,OAAO,YAAY,EAAE;AACrB,OAAO,QAAQ,CAAC,IAAI,CAAC;AACrB,OAAO,MAAM,CAAC,YAAY,CAAC;AAC3B,KAAK;AACL,KAAK,IAAI,EAAE,CAAC;AACZ;AACA,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK;AAC9B,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC;AAC/C;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAClC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;AACxB;AACA,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI;AACvB,QAAQ,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AACrB;AACA;AACA,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG;AACtB,UAAU,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI;AACvC,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AACtC,SAAS,CAAC;AACV,OAAO,EAAC;AACR,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE;AAC1B,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,QAAO;AACvC,KAAK,MAAM;AACX,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG;AACzB,QAAQ,MAAM,EAAE,OAAO;AACvB,QAAO;AACP,KAAK;AACL;AACA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG;AACvB,MAAM,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC;AAC5B,MAAK;AACL;AACA;AACA;AACA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC;AAC3B,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC;AAC3B;AACA;AACA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrE,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAC3C;AACA,MAAM,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC1B,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC1C,QAAQ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;AACrE,QAAQ,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACxB,QAAQ,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAC/B,OAAO,CAAC,CAAC;AACT;AACA,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC;AAC7E,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,KAAK;AACL;AACA,IAAI,OAAO,GAAG,CAAC;AACf,MAAM,GAAG,IAAI;AACb,MAAM,IAAI,EAAE;AACZ,QAAQ,IAAI,EAAE,QAAQ;AACtB,QAAQ,MAAM,EAAE,GAAG;AACnB,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,CAAC;AACL;;ACrZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,KAAK;AAChE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;AAClD,EAAE,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAC1C,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;AACjC;AACA;AACA,EAAE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC/C,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;AACtC,IAAI,OAAO;AACX,MAAM,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACvC,MAAM,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,MAAM,IAAI,EAAE;AACZ,QAAQ,IAAI,EAAE,MAAM;AACpB,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AACxD,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AACzD,OAAO;AACP,MAAM,QAAQ,EAAE;AAChB,QAAQ,CAAC,EAAE;AACX,UAAU,KAAK,EAAE,IAAI,CAAC,OAAO;AAC7B,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,SAAS,EAAE,OAAO;AAC5B;AACA,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,MAAM,EAAE;AACd,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAClC,MAAM,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpD,MAAM,OAAO;AACb,QAAQ,GAAG,CAAC;AACZ,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC;AACzB,OAAO,CAAC;AACR,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,OAAO,EAAE,IAAI,CAAC,MAAM;AACxB,IAAI,KAAK;AACT,IAAI,MAAM;AACV,IAAI,IAAI,EAAE;AACV,MAAM,IAAI,EAAE,QAAQ;AACpB,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,KAAK,EAAE;AACX,MAAM;AACN,QAAQ,IAAI,EAAE,MAAM;AACpB,QAAQ,IAAI,EAAE,MAAM,CAAC,IAAI;AACzB,QAAQ,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACjC,OAAO;AACP,MAAM,GAAG,KAAK;AACd,KAAK;AACL,GAAG,CAAC;AACJ,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,KAAK;AACpE,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC;AACxB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;AAClD,EAAE,MAAM,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;AAC/B,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AAC3B,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB;AACA,EAAE,MAAM,MAAM,GAAG,CAAC,IAAI,KAAK;AAC3B,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7C;AACA,IAAI,IAAI,MAAM,GAAG,IAAI;AACrB,OAAO,KAAK,EAAE;AACd,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AACtB,QAAQ,MAAM,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAC;AAC7D,QAAQ,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5D,OAAO,CAAC;AACR,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AACrB,QAAQ,OAAO;AACf,UAAU,GAAG,CAAC;AACd,UAAU,IAAI,EAAE,CAAC,GAAG,CAAC;AACrB,SAAS,CAAC;AACV,OAAO,CAAC,CAAC;AACT;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK;AACnD,MAAM,OAAO,QAAQ,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjD,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,YAAY,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AACxE,IAAI,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AAChE,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AACnD,IAAI,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,WAAW,GAAG,IAAI,CAAC;AAC/D,IAAI,MAAM,EAAE,GAAG,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC;AAClC;AACA,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;AAC/B,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC;AAC5D,MAAM,MAAM,OAAO,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC;AACvE,MAAM,MAAM,SAAS;AACrB,QAAQ,IAAI,KAAK,IAAI,IAAI,cAAc,IAAI,IAAI,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E;AACA,MAAM,IAAI,QAAQ,GAAG,IAAI,CAAC;AAC1B;AACA,MAAM,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AAC5B,QAAQ,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AACxC,OAAO,MAAM,IAAI,SAAS,KAAK,CAAC,EAAE;AAClC,QAAQ,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AACxC,OAAO,MAAM;AACb,QAAQ,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,OAAO;AACP;AACA,MAAM,OAAO;AACb,QAAQ,GAAG,CAAC;AACZ,QAAQ,SAAS;AACjB,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,QAAQ;AACzC,QAAQ,QAAQ;AAChB,QAAQ,YAAY;AACpB,OAAO,CAAC;AACR,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,yBAAyB,CAAC,CAAC;AACvF,IAAI,IAAI,WAAW,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AACnE;AACA,IAAI,IAAI,OAAO,GAAG,UAAU,CAAC;AAC7B;AACA,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,MAAM,IAAI,MAAM,CAAC;AACvB,MAAM,WAAW,IAAI,MAAM,CAAC;AAC5B,MAAM,OAAO,IAAI,GAAG,CAAC;AACrB;AACA,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AAC5B,QAAQ,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ;AAC3D,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACzC,SAAS,CAAC,CAAC,CAAC;AACZ,QAAQ,WAAW,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ;AAChE,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACzC,SAAS,CAAC,CAAC,CAAC;AACZ,QAAQ,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnD,OAAO;AACP;AACA,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7C,QAAQ,MAAM,IAAI,MAAM,CAAC;AACzB,QAAQ,WAAW,IAAI,MAAM,CAAC;AAC9B,QAAQ,OAAO,IAAI,GAAG,CAAC;AACvB,OAAO;AACP;AACA,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AACzB,QAAQ,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ;AACxD,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtC,SAAS,CAAC,CAAC,CAAC;AACZ,QAAQ,WAAW,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ;AAC7D,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtC,SAAS,CAAC,CAAC,CAAC;AACZ,QAAQ,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,OAAO;AACP,KAAK;AACL;AACA,IAAI,UAAU,CAAC,IAAI,CAAC;AACpB,MAAM,MAAM;AACZ,MAAM,WAAW;AACjB,MAAM,UAAU;AAChB,MAAM,QAAQ,EAAE,IAAI,CAAC,OAAO;AAC5B,MAAM,MAAM,EAAE,QAAQ;AACtB,MAAM,OAAO;AACb,MAAM,UAAU,EAAE,YAAY;AAC9B,MAAM,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC;AAChD,MAAM,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC;AACrE,MAAM,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC;AACnE,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3B,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC;AACA,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC7C,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1C,KAAK;AACL,GAAG;AACH;AACA,EAAE,EAAE,CAAC,MAAM;AACX,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC9B,IAAI,MAAM;AACV,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AAC9B,MAAM,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,KAAK,CAAC;AACN,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;AACnB;AACA,EAAE,IAAI,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;AACrD;AACA,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,SAAS,GAAG,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC;AACvD,GAAG;AACH;AACA,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC/B,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;AAChC;AACA,IAAI,MAAM,QAAQ,GAAG;AACrB,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAC9E,MAAM,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AACnC,MAAM,IAAI,EAAE;AACZ,QAAQ,IAAI,EAAE,MAAM;AACpB,QAAQ,CAAC,EAAE,QAAQ;AACnB,YAAY,CAAC,CAAC,UAAU;AACxB,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AACzD,QAAQ,EAAE,EAAE,QAAQ;AACpB,YAAY,CAAC,CAAC,QAAQ;AACtB,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AACzD,OAAO;AACP,MAAM,QAAQ,EAAE;AAChB,QAAQ,CAAC,EAAE;AACX,UAAU,KAAK,EAAE,SAAS;AAC1B,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,IAAI,EAAE,IAAI;AACpB,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,MAAM,WAAW,GAAG;AACxB,MAAM,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAC9E,MAAM,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AACtC,MAAM,IAAI,EAAE;AACZ,QAAQ,IAAI,EAAE,MAAM;AACpB,QAAQ,CAAC,EAAE,QAAQ;AACnB,YAAY,CAAC,CAAC,UAAU;AACxB,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AACzD,QAAQ,EAAE,EAAE,QAAQ;AACpB,YAAY,CAAC,CAAC,QAAQ;AACtB,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AACzD,OAAO;AACP,MAAM,QAAQ,EAAE;AAChB,QAAQ,CAAC,EAAE;AACX,UAAU,KAAK,EAAE,SAAS;AAC1B,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,IAAI,EAAE,IAAI;AACpB,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACtC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO;AACT,IAAI,OAAO,EAAE,IAAI,CAAC,MAAM;AACxB,IAAI,KAAK;AACT,IAAI,MAAM;AACV,IAAI,IAAI,EAAE;AACV,MAAM,UAAU;AAChB,KAAK;AACL,IAAI,IAAI,EAAE;AACV,MAAM,IAAI,EAAE,QAAQ;AACpB,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,KAAK,EAAE;AACX,MAAM;AACN,QAAQ,IAAI,EAAE,MAAM;AACpB,QAAQ,IAAI,EAAE,MAAM,CAAC,IAAI;AACzB,QAAQ,QAAQ,EAAE;AAClB,UAAU,GAAG,MAAM,CAAC,QAAQ;AAC5B,UAAU,CAAC,EAAE;AACb,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,YAAY,KAAK,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM;AACxC,WAAW;AACX,UAAU,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;AACtC,SAAS;AACT,OAAO;AACP,MAAM,GAAG,KAAK;AACd,KAAK;AACL,IAAI,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE;AAC3C,GAAG,CAAC;AACJ,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK;AAC/C,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC;AACxB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;AAClD,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AAChD;AACA,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AAC3B;AACA,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB;AACA,EAAE,MAAM,MAAM,GAAG,CAAC,IAAI,KAAK;AAC3B,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7C;AACA,IAAI,IAAI,MAAM,GAAG,IAAI;AACrB,OAAO,KAAK,EAAE;AACd,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AACtB,QAAQ,MAAM,MAAM,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAC;AAC7D,QAAQ,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5D,OAAO,CAAC;AACR,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AACrB,QAAQ,OAAO;AACf,UAAU,GAAG,CAAC;AACd,UAAU,IAAI,EAAE,CAAC,GAAG,CAAC;AACrB,SAAS,CAAC;AACV,OAAO,CAAC,CAAC;AACT;AACA,IAAI,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK;AAC1C,MAAM,OAAO,QAAQ,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjD,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,UAAU,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAClE,IAAI,MAAM,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AACrD,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AACnD,IAAI,MAAM,OAAO,GAAG,QAAQ,GAAG,GAAG,CAAC;AACnC,IAAI,MAAM,UAAU,GAAG,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;AACzC;AACA,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;AAC/B,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,IAAI,OAAO,CAAC;AACjE;AACA,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,SAAS,IAAI,OAAO,CAAC;AAC7E,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,SAAS,IAAI,OAAO,CAAC;AAC3E;AACA,MAAM,OAAO;AACb,QAAQ,GAAG,CAAC;AACZ,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM;AAC9B,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,mBAAmB,GAAG,UAAU;AAC5D,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY;AACpC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,yBAAyB,GAAG,UAAU;AAClE,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU;AAClC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,uBAAuB,GAAG,UAAU;AAChE,QAAQ,MAAM;AACd,QAAQ,UAAU;AAClB,OAAO,CAAC;AACR,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAC9D,IAAI,IAAI,OAAO,GAAG,UAAU,CAAC;AAC7B;AACA,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,MAAM,IAAI,MAAM,CAAC;AACvB,MAAM,OAAO,IAAI,GAAG,CAAC;AACrB;AACA,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AAC5B,QAAQ,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ;AAC3D,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACzC,SAAS,CAAC,CAAC,CAAC;AACZ,QAAQ,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnD,OAAO;AACP;AACA,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7C,QAAQ,MAAM,IAAI,MAAM,CAAC;AACzB,QAAQ,OAAO,IAAI,GAAG,CAAC;AACvB,OAAO;AACP;AACA,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AACzB,QAAQ,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ;AACxD,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtC,SAAS,CAAC,CAAC,CAAC;AACZ,QAAQ,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChD,OAAO;AACP,KAAK;AACL;AACA,IAAI,UAAU,CAAC,IAAI,CAAC;AACpB,MAAM,MAAM;AACZ,MAAM,UAAU;AAChB,MAAM,QAAQ,EAAE,IAAI,CAAC,OAAO;AAC5B,MAAM,OAAO,EAAE,OAAO;AACtB,MAAM,IAAI,EAAE,MAAM;AAClB,MAAM,QAAQ,EAAE,UAAU;AAC1B,MAAM,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;AACvE,MAAM,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC;AACnE,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3B;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC;AACA,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC7C,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1C,KAAK;AACL,GAAG;AACH;AACA,EAAE,EAAE,CAAC,OAAO;AACZ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC9B,IAAI,MAAM;AACV,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AAC9B,MAAM,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,KAAK,CAAC;AACN,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;AACnB;AACA,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC/B,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;AAChC;AACA,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AACvC,MAAM,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AAC/B,MAAM,IAAI,EAAE;AACZ,QAAQ,IAAI,EAAE,MAAM;AACpB,QAAQ,CAAC,EAAE,QAAQ;AACnB,YAAY,CAAC,CAAC,UAAU;AACxB,YAAY;AACZ,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAC/E,aAAa;AACb,QAAQ,EAAE,EAAE,QAAQ;AACpB,YAAY,CAAC,CAAC,QAAQ;AACtB,YAAY;AACZ,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAC/E,aAAa;AACb,OAAO;AACP,MAAM,QAAQ,EAAE;AAChB,QAAQ,CAAC,EAAE;AACX,UAAU,KAAK,EAAE,QAAQ,GAAG,YAAY,GAAG,IAAI,CAAC,OAAO;AACvD,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,SAAS,EAAE,MAAM;AAC3B,UAAU,IAAI,EAAE,IAAI;AACpB,UAAU,KAAK,EAAE,EAAE,MAAM,EAAE;AAC3B,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO;AACT,IAAI,OAAO,EAAE,IAAI,CAAC,MAAM;AACxB,IAAI,KAAK;AACT,IAAI,MAAM;AACV,IAAI,IAAI,EAAE;AACV,MAAM,UAAU;AAChB,KAAK;AACL,IAAI,IAAI,EAAE;AACV,MAAM,IAAI,EAAE,QAAQ;AACpB,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,KAAK,EAAE;AACX,MAAM;AACN,QAAQ,IAAI,EAAE,MAAM;AACpB,QAAQ,IAAI,EAAE,MAAM,CAAC,IAAI;AACzB,QAAQ,QAAQ,EAAE;AAClB,UAAU,GAAG,MAAM,CAAC,QAAQ;AAC5B,UAAU,CAAC,EAAE;AACb,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,YAAY,KAAK,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM;AACxC,WAAW;AACX,SAAS;AACT,OAAO;AACP,MAAM,GAAG,KAAK;AACd,KAAK;AACL,IAAI,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE;AAC3C,GAAG,CAAC;AACJ,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,KAAK,KAAK;AACnE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;AAClD,EAAE,MAAM,MAAM,GAAG,QAAQ,KAAK,KAAK,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;AACtD,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AAChD,EAAE,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AAC3B;AACA,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB;AACA,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AAC1B,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC7C,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1C,KAAK;AACL,GAAG;AACH;AACA,EAAE,MAAM,UAAU,GAAG,EAAE,CAAC;AACxB;AACA,EAAE,EAAE,CAAC,MAAM;AACX,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAC9B,IAAI,CAAC,IAAI,KAAK;AACd,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/C,MAAM,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAChE,MAAM,IAAI,OAAO,GAAG,UAAU,CAAC;AAC/B;AACA,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,MAAM,IAAI,MAAM,CAAC;AACzB,QAAQ,OAAO,IAAI,GAAG,CAAC;AACvB;AACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,UAAU,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ;AAC7D,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3C,WAAW,CAAC,CAAC,CAAC;AACd,UAAU,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACrD,SAAS;AACT;AACA,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC/C,UAAU,MAAM,IAAI,MAAM,CAAC;AAC3B,UAAU,OAAO,IAAI,GAAG,CAAC;AACzB,SAAS;AACT;AACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,UAAU,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ;AAC1D,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACxC,WAAW,CAAC,CAAC,CAAC;AACd,UAAU,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClD,SAAS;AACT,OAAO;AACP;AACA,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK;AACvC,QAAQ,OAAO,QAAQ,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnD,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC9D;AACA,MAAM,UAAU,CAAC,IAAI,CAAC;AACtB,QAAQ,MAAM;AACd,QAAQ,UAAU;AAClB,QAAQ,QAAQ,EAAE,IAAI,CAAC,OAAO;AAC9B,QAAQ,IAAI;AACZ,QAAQ,QAAQ;AAChB,QAAQ,OAAO;AACf,QAAQ,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5D,QAAQ,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1D,OAAO,CAAC,CAAC;AACT;AACA,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;AACjC,QAAQ,MAAM,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtD,QAAQ,OAAO,CAAC,KAAK,IAAI,CAAC;AAC1B,OAAO,CAAC,CAAC;AACT;AACA,MAAM,MAAM,CAAC,IAAI;AACjB,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;AAC3B,UAAU,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,CAAC;AAC1D;AACA,UAAU,OAAO;AACjB,YAAY,GAAG,CAAC;AAChB,YAAY,MAAM;AAClB,YAAY,QAAQ;AACpB,WAAW,CAAC;AACZ,SAAS,CAAC;AACV,OAAO,CAAC;AACR,KAAK;AACL,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK;AAC9B,MAAM,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,KAAK,CAAC;AACN,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK;AAC7C,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;AAChC,IAAI,OAAO;AACX,MAAM,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAC3C,MAAM,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC,MAAM,IAAI,EAAE;AACZ,QAAQ,IAAI,EAAE,MAAM;AACpB,QAAQ,CAAC,EAAE,QAAQ;AACnB,YAAY,KAAK,CAAC,UAAU;AAC5B,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AACzD,QAAQ,EAAE,EAAE,QAAQ;AACpB,YAAY,KAAK,CAAC,QAAQ;AAC1B,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AACzD,OAAO;AACP,MAAM,QAAQ,EAAE;AAChB,QAAQ,CAAC,EAAE;AACX,UAAU,KAAK,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO;AACrD,UAAU,IAAI,EAAE,cAAc;AAC9B,UAAU,SAAS,EAAE,QAAQ;AAC7B,UAAU,IAAI,EAAE,IAAI;AACpB,UAAU,KAAK,EAAE,EAAE,MAAM,EAAE;AAC3B,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO;AACT,IAAI,OAAO,EAAE,IAAI,CAAC,MAAM;AACxB,IAAI,KAAK;AACT,IAAI,MAAM;AACV,IAAI,IAAI,EAAE;AACV,MAAM,UAAU;AAChB,KAAK;AACL,IAAI,IAAI,EAAE;AACV,MAAM,IAAI,EAAE,QAAQ;AACpB,MAAM,MAAM,EAAE,MAAM;AACpB,KAAK;AACL,IAAI,KAAK,EAAE;AACX,MAAM;AACN,QAAQ,IAAI,EAAE,MAAM;AACpB,QAAQ,IAAI,EAAE,MAAM,CAAC,IAAI;AACzB,QAAQ,QAAQ,EAAE;AAClB,UAAU,GAAG,MAAM,CAAC,QAAQ;AAC5B,SAAS;AACT,OAAO;AACP,MAAM,GAAG,KAAK;AACd,KAAK;AACL,IAAI,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE;AAC3C,GAAG,CAAC;AACJ,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,gBAAgB,GAAG;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,EAAE,OAAO,SAAS,EAAE,MAAM,KAAK;AACtC,IAAI,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC1D,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,IAAI,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACzD,IAAI,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACzD,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK;AAC9B,IAAI,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3D;AACA,IAAI,MAAM,MAAM,GAAG;AACnB,MAAM,GAAG,MAAM;AACf,MAAM,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;AACtD,MAAM,KAAK,EAAE;AACb,QAAQ;AACR,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,UAAU,QAAQ,EAAE;AACpB,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ;AACvC,YAAY,CAAC,EAAE;AACf,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC3C,cAAc,SAAS,EAAE,KAAK;AAC9B,aAAa;AACb,WAAW;AACX,SAAS;AACT,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK;AACtC,IAAI,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3D;AACA,IAAI,MAAM,MAAM,GAAG;AACnB,MAAM,GAAG,MAAM;AACf,MAAM,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;AACtD,MAAM,KAAK,EAAE;AACb,QAAQ;AACR,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,UAAU,QAAQ,EAAE;AACpB,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ;AACvC,YAAY,CAAC,EAAE;AACf,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC3C,cAAc,SAAS,EAAE,KAAK;AAC9B,aAAa;AACb,WAAW;AACX,SAAS;AACT,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/C,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK;AAC/B,IAAI,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAClD;AACA,IAAI,MAAM,QAAQ,GAAG,CAAC,CAAC;AACvB;AACA,IAAI,MAAM,MAAM,GAAG;AACnB,MAAM,GAAG,MAAM;AACf,MAAM,KAAK,EAAE;AACb,QAAQ;AACR,UAAU,IAAI,EAAE,MAAM;AACtB,UAAU,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE;AACvE,UAAU,QAAQ,EAAE;AACpB,YAAY,CAAC,EAAE;AACf,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC,aAAa;AACb,YAAY,CAAC,EAAE;AACf,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrC,cAAc,KAAK,EAAE,IAAI,CAAC,OAAO,GAAG,YAAY;AAChD,aAAa;AACb,YAAY,EAAE,EAAE;AAChB,cAAc,KAAK,EAAE,IAAI,CAAC,OAAO,GAAG,UAAU;AAC9C,aAAa;AACb,YAAY,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK;AAC3C,WAAW;AACX,SAAS;AACT,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,MAAM,GAAG;AACnB,MAAM,GAAG,MAAM;AACf,MAAM,KAAK,EAAE;AACb,QAAQ;AACR,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,UAAU,IAAI,EAAE;AAChB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,QAAQ;AAC3B,WAAW;AACX,UAAU,QAAQ,EAAE;AACpB,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ;AACvC,YAAY,EAAE,EAAE;AAChB,cAAc,KAAK,EAAE,YAAY;AACjC,aAAa;AACb,WAAW;AACX,SAAS;AACT,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,OAAO;AACP,KAAK,CAAC;AACN,IAAI,MAAM,MAAM,GAAG;AACnB,MAAM,GAAG,MAAM;AACf,MAAM,KAAK,EAAE;AACb,QAAQ;AACR,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,UAAU,IAAI,EAAE;AAChB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,KAAK,EAAE,QAAQ;AAC3B,WAAW;AACX,UAAU,QAAQ,EAAE;AACpB,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ;AACvC,YAAY,CAAC,EAAE;AACf,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC3C,cAAc,KAAK,EAAE,YAAY;AACjC,aAAa;AACb,YAAY,EAAE,EAAE;AAChB,cAAc,KAAK,EAAE,YAAY;AACjC,aAAa;AACb,WAAW;AACX,SAAS;AACT,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,MAAM,YAAY,GAAG;AACzB,MAAM,GAAG,SAAS;AAClB,MAAM,IAAI,EAAE;AACZ,QAAQ,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;AAClC,OAAO;AACP,MAAM,QAAQ,EAAE;AAChB,QAAQ,GAAG,SAAS,CAAC,QAAQ;AAC7B,QAAQ,CAAC,EAAE;AACX,UAAU,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AACjC,UAAU,KAAK,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM;AACtC,SAAS;AACT,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,OAAO,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,KAAK;AACtD,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC;AAC9D,IAAI,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AACjE,IAAI,MAAM,gBAAgB,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7E;AACA,IAAI,OAAO;AACX,MAAM,SAAS;AACf,MAAM,OAAO;AACb,MAAM,gBAAgB;AACtB,MAAM,MAAM;AACZ,KAAK,CAAC;AACN,GAAG;AACH;;ACp1BA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,IAAI,EAAE;AACnC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AAC5C,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1C;AACA,EAAE,OAAO;AACT,IAAI,OAAO,EAAE,IAAI,CAAC,MAAM;AACxB,IAAI,KAAK,EAAE,GAAG;AACd,IAAI,MAAM,EAAE,GAAG;AACf,IAAI,IAAI,EAAE;AACV,MAAM,WAAW;AACjB,MAAM,IAAI,EAAE,KAAK;AACjB,KAAK;AACL,IAAI,IAAI,EAAE;AACV,MAAM,MAAM,EAAE;AACd,QAAQ;AACR,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC;AAC3B,UAAU,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC;AAC3B,SAAS;AACT,OAAO;AACP,KAAK;AACL,IAAI,IAAI,EAAE;AACV,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,MAAM,EAAE,IAAI;AAClB,MAAM,WAAW,EAAE,CAAC;AACpB,MAAM,KAAK,EAAE,aAAa;AAC1B,KAAK;AACL,IAAI,QAAQ,EAAE;AACd,MAAM,CAAC,EAAE;AACT,QAAQ,KAAK,EAAE,IAAI,CAAC,OAAO;AAC3B,QAAQ,IAAI,EAAE,cAAc;AAC5B,QAAQ,KAAK,EAAE;AACf,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzB,SAAS;AACT,QAAQ,IAAI,EAAE;AACd,UAAU,IAAI,EAAE,KAAK;AACrB,UAAU,KAAK,EAAE,KAAK;AACtB,UAAU,KAAK,EAAE,UAAU;AAC3B,UAAU,MAAM,EAAE,KAAK;AACvB,UAAU,MAAM,EAAE,EAAE;AACpB,SAAS;AACT,OAAO;AACP,MAAM,CAAC,EAAE;AACT,QAAQ,KAAK,EAAE,IAAI,CAAC,OAAO;AAC3B,QAAQ,IAAI,EAAE,cAAc;AAC5B,QAAQ,KAAK,EAAE;AACf,UAAU,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzB,SAAS;AACT,QAAQ,IAAI,EAAE;AACd,UAAU,IAAI,EAAE,KAAK;AACrB,UAAU,KAAK,EAAE,KAAK;AACtB,UAAU,KAAK,EAAE,IAAI;AACrB,UAAU,MAAM,EAAE,KAAK;AACvB,UAAU,MAAM,EAAE,EAAE;AACpB,SAAS;AACT,OAAO;AACP,KAAK;AACL,GAAG,CAAC;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE;AAClF,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B;AACA,EAAE,IAAI,QAAQ,CAAC,CAAC,EAAE;AAClB,IAAI,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AACpE;AACA,IAAI,QAAQ,CAAC,CAAC,GAAG;AACjB,MAAM,KAAK,EAAE,IAAI,CAAC,OAAO;AACzB,MAAM,IAAI,EAAE,cAAc;AAC1B,MAAM,KAAK,EAAE,EAAE;AACf,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC;AAClB,UAAU;AACV,YAAY,SAAS,EAAE,EAAE;AACzB,YAAY,MAAM,EAAE,EAAE;AACtB,YAAY,KAAK,EAAE,KAAK;AACxB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,MAAM,EAAE,KAAK;AACzB,YAAY,KAAK,EAAE,KAAK;AACxB,YAAY,MAAM,EAAE,KAAK;AACzB,YAAY,YAAY,EAAE,EAAE;AAC5B,WAAW;AACX,UAAU,IAAI;AACd,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,IAAI,QAAQ,CAAC,CAAC,EAAE;AAClB,IAAI,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;AAC9D;AACA,IAAI,QAAQ,CAAC,CAAC,GAAG;AACjB,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;AAC5E,MAAM,IAAI,EAAE,cAAc;AAC1B,MAAM,KAAK,EAAE,EAAE;AACf,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC;AAClB,UAAU;AACV,YAAY,SAAS,EAAE,EAAE;AACzB,YAAY,MAAM,EAAE,EAAE;AACtB,YAAY,KAAK,EAAE,KAAK;AACxB,YAAY,IAAI,EAAE,KAAK;AACvB,YAAY,UAAU,EAAE,EAAE;AAC1B,YAAY,MAAM,EAAE,KAAK;AACzB,YAAY,KAAK,EAAE,KAAK;AACxB,YAAY,YAAY,EAAE,EAAE;AAC5B,YAAY,MAAM,EAAE,OAAO;AAC3B,WAAW;AACX,UAAU,IAAI;AACd,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,MAAM,WAAW,GAAG,EAAE,CAAC;AACzB;AACA,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;AACtB,IAAI,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAC3C,GAAG;AACH;AACA,EAAE,OAAO;AACT,IAAI,OAAO,EAAE,IAAI,CAAC,MAAM;AACxB,IAAI,IAAI,EAAE;AACV,MAAM,MAAM,EAAE,EAAE;AAChB,KAAK;AACL,IAAI,KAAK,EAAE,KAAK;AAChB,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,QAAQ,EAAE,QAAQ;AACtB,IAAI,GAAG,WAAW;AAClB,GAAG,CAAC;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE;AACzE,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;AAC7D,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AACnE;AACA,EAAE,MAAM,OAAO,GAAG,eAAe;AACjC,IAAI,KAAK;AACT,IAAI,MAAM;AACV,IAAI;AACJ,MAAM,CAAC,EAAE,KAAK;AACd,MAAM,CAAC,EAAE,KAAK;AACd,KAAK;AACL,IAAI,IAAI;AACR,GAAG,CAAC;AACJ;AACA,EAAE,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC9B,EAAE,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7B;AACA,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB;AACA,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3B,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;AAC3B;AACA,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrC;AACA,EAAE,IAAI,UAAU,EAAE,aAAa,CAAC;AAChC;AACA;AACA,EAAE,IAAI,KAAK,KAAK,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE;AACvD,IAAI,MAAM,WAAW,GAAG,EAAE,CAAC;AAC3B,IAAI,MAAM,SAAS,GAAG,EAAE,CAAC;AACzB;AACA,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AACjC,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AAC9B,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;AAC3B,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;AAC3B;AACA,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3B;AACA,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACpD;AACA,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,MAAM,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAC/B,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACxD,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACxD;AACA,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;AACjD,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS;AACzD,MAAM,SAAS;AACf,KAAK,CAAC,aAAa,CAAC,CAAC;AACrB,GAAG;AACH;AACA;AACA,EAAE,IAAI,KAAK,KAAK,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE;AAC7D,IAAI,MAAM,WAAW,GAAG,EAAE,CAAC;AAC3B,IAAI,MAAM,SAAS,GAAG,EAAE,CAAC;AACzB;AACA,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AACpC,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AAC9B;AACA,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAClC;AACA,MAAM,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACzE;AACA,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,MAAM,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAC/B,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3D,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3D;AACA,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;AACjD,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS;AACzD,MAAM,SAAS;AACf,KAAK,CAAC,aAAa,CAAC,CAAC;AACrB,GAAG;AACH;AACA;AACA,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AACxB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACzB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACzB;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACxC;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;AACrF,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,iBAAiB,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;AACrF;AACA,IAAI,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9C;AACA,IAAI,MAAM,CAAC,IAAI,CAAC;AAChB,MAAM,GAAG,CAAC;AACV,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM;AAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM;AAC9E,MAAM,MAAM,EAAE,CAAC,GAAG,KAAK,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;AAC3C,MAAM,MAAM,EAAE,CAAC,GAAG,KAAK,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;AAC3C,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;AAC5C,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC;AAC5C,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC/B,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1C,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC3C;AACA,EAAE,OAAO,OAAO,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,SAAS,CAAC,IAAI,EAAE;AAChC,EAAE,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5C;AACA,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AAC5B;AACA,EAAE,OAAO,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK;AAClE,IAAI,MAAM,OAAO,GAAG,aAAa,CAAC;AAClC,MAAM,GAAG,IAAI;AACb,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;AAC5B,MAAM,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;AAC9B,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACrB,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACnC,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACnB,MAAM,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC/B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;AACrD;AACA,IAAI,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC/D,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,KAAK;AACL;AACA,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE;AACtB,MAAM,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC3C,MAAM,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC3C,KAAK,MAAM;AACX,MAAM,OAAO,CAAC,IAAI,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAChD,KAAK;AACL;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG,CAAC,CAAC;AACL;;AC1TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;AACjF,EAAE,IAAI,iBAAiB,CAAC;AACxB,EAAE,IAAI,QAAQ,CAAC;AACf,EAAE,IAAI,aAAa,CAAC;AACpB,EAAE,IAAI,SAAS,CAAC;AAChB,EAAE,IAAI,MAAM,CAAC;AACb,EAAE,IAAI,KAAK,CAAC;AACZ,EAAE,IAAI,UAAU,GAAG,CAAC,CAAC;AACrB,EAAE,IAAI,SAAS,CAAC;AAChB,EAAE,IAAI,OAAO,GAAG,KAAK,CAAC;AACtB,EAAE,IAAI,YAAY,GAAG,KAAK,CAAC;AAC3B,EAAE,IAAI,aAAa,GAAG,QAAQ,IAAI,IAAI,CAAC;AACvC,EAAE,IAAI,UAAU,GAAG,QAAQ,IAAI,IAAI,CAAC;AACpC;AACA;AACA,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,QAAQ,EAAE;AACd,MAAM,MAAM,EAAE;AACd,QAAQ;AACR,UAAU,IAAI,EAAE;AAChB,YAAY;AACZ,cAAc,SAAS,EAAE;AACzB,gBAAgB,IAAI,EAAE,OAAO;AAC7B,eAAe;AACf,cAAc,MAAM,EAAE;AACtB,gBAAgB,IAAI,EAAE;AACtB,kBAAkB,IAAI,EAAE,CAAC,WAAW,CAAC;AACrC,kBAAkB,MAAM,EAAE,IAAI;AAC9B,kBAAkB,KAAK,EAAE,IAAI;AAC7B,kBAAkB,IAAI,EAAE,KAAK;AAC7B,iBAAiB;AACjB,gBAAgB,MAAM,EAAE;AACxB,kBAAkB,MAAM,EAAE,IAAI;AAC9B,kBAAkB,KAAK,EAAE,IAAI;AAC7B,kBAAkB,IAAI,EAAE,IAAI;AAC5B,iBAAiB;AACjB,eAAe;AACf,cAAc,MAAM,EAAE;AACtB,gBAAgB,QAAQ,EAAE;AAC1B,kBAAkB,KAAK,EAAE,CAAC;AAC1B,iBAAiB;AACjB,eAAe;AACf,aAAa;AACb,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK;AACL,IAAI,aAAa,EAAE,aAAa;AAChC,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,MAAM,KAAK,GAAG,MAAM;AACtB,IAAI,aAAa,GAAG,EAAE,CAAC;AACvB,IAAI,SAAS,GAAG,EAAE,CAAC;AACnB,IAAI,QAAQ,GAAG,EAAE,CAAC;AAClB,IAAI,iBAAiB,GAAG,EAAE,CAAC;AAC3B,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB;AACA,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;AAC9B,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,KAAK;AACL,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA,EAAE,eAAe,IAAI,GAAG;AACxB;AACA,IAAI,IAAI,YAAY,EAAE,OAAO;AAC7B,IAAI,YAAY,GAAG,IAAI,CAAC;AACxB;AACA,IAAI,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AACxC;AACA,IAAI,KAAK,EAAE,CAAC;AACZ;AACA;AACA,IAAI,IAAI,KAAK,EAAE;AACf,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,KAAK;AACL;AACA;AACA,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AACjC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,MAAM,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D;AACA,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE;AAClB,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3B,OAAO;AACP,KAAK,CAAC,CAAC;AACP;AACA,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChE;AACA;AACA,IAAI,MAAM,cAAc,EAAE,CAAC;AAC3B;AACA;AACA,IAAI,WAAW,EAAE,CAAC;AAClB;AACA;AACA,IAAI,MAAM,UAAU,EAAE,CAAC;AACvB;AACA,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChB;AACA,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5B,KAAK;AACL;AACA,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE;AAC/B,IAAI,OAAO,GAAG,IAAI,CAAC;AACnB,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB;AACA,IAAI,MAAM,IAAI,GAAG,MAAM;AACvB,MAAM,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;AAC9C,QAAQ,IAAI,OAAO,EAAE;AACrB,UAAU,UAAU,EAAE,CAAC;AACvB;AACA,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE;AAClC,YAAY,IAAI,EAAE,CAAC;AACnB,WAAW,MAAM;AACjB,YAAY,OAAO,GAAG,KAAK,CAAC;AAC5B,YAAY,aAAa,CAAC,QAAQ,CAAC,CAAC;AACpC,WAAW;AACX,SAAS;AACT,OAAO,CAAC,CAAC;AACT;AACA,MAAM,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,WAAW,CAAC,SAAS,EAAE;AACvE,QAAQ,IAAI,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC;AACvC,QAAQ,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;AACvD,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;AAC7B,IAAI,IAAI,EAAE,CAAC;AACX,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE;AACrC,IAAI,IAAI,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;AACpC;AACA,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO;AACtB;AACA,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACrB,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1E,KAAK;AACL;AACA,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9B;AACA,IAAI,MAAM;AACV,MAAM,YAAY;AAClB,MAAM,WAAW;AACjB,MAAM,KAAK;AACX,MAAM,MAAM;AACZ,MAAM,WAAW;AACjB,MAAM,QAAQ;AACd,MAAM,UAAU;AAChB,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AACzB;AACA,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC/C,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC;AAChE,IAAI,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;AAC3B,OAAO,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1C,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;AAChB,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D;AACA;AACA,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACnB,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtB,KAAK;AACL;AACA,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;AAC5C,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;AAC5C;AACA;AACA,IAAI,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;AAC1B,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;AACvC,OAAO,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;AACvC;AACA,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,EAAE,CAAC;AAChD,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AACtD,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AACnD;AACA;AACA,IAAI,OAAO,SAAS,CAAC,IAAI,EAAE,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC;AAC1E,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE;AACrC,IAAI,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AAC1D,IAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AACvD,IAAI,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC;AAC1B;AACA,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC7B,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK;AAClC,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC/B,UAAU,IAAI,MAAM;AACpB,YAAY,SAAS,GAAG,CAAC,CAAC;AAC1B;AACA,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC/B,YAAY,MAAM,GAAG,WAAW,CAAC;AACjC,YAAY,IAAI,QAAQ,EAAE;AAC1B,cAAc,SAAS,GAAG,QAAQ,CAAC;AACnC,aAAa;AACb,WAAW,MAAM;AACjB,YAAY,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACtD,YAAY,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACnD,YAAY,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACpC,YAAY,MAAM,GAAG,GAAG,CAAC;AACzB,WAAW;AACX;AACA,UAAU,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;AACvE,YAAY,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,cAAc,GAAG,EAAE,CAAC;AACpB,aAAa;AACb;AACA;AACA,YAAY,UAAU,CAAC,MAAM;AAC7B,cAAc,sBAAsB,EAAE,CAAC;AACvC,aAAa,EAAE,GAAG,CAAC,CAAC;AACpB,WAAW,CAAC,CAAC;AACb,SAAS,CAAC,CAAC;AACX,OAAO,CAAC,CAAC;AACT,KAAK,MAAM;AACX,MAAM,OAAO,SAAS,CAAC,WAAW,EAAE,QAAQ,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3E,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,sBAAsB,GAAG;AACpC,IAAI,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AAC3D,IAAI,MAAM,SAAS,GAAG,EAAE;AACxB,OAAO,MAAM,CAAC,YAAY,CAAC;AAC3B,OAAO,SAAS,CAAC,oBAAoB,CAAC;AACtC,OAAO,KAAK,EAAE,CAAC;AACf,IAAI,MAAM,gBAAgB,GAAG,EAAE;AAC/B,OAAO,MAAM,CAAC,WAAW,CAAC;AAC1B,OAAO,SAAS,CAAC,oBAAoB,CAAC;AACtC,OAAO,KAAK,EAAE,CAAC;AACf;AACA,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK,gBAAgB,CAAC,MAAM,EAAE;AACtD,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACjD,QAAQ,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AACjE,QAAQ,gBAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AACjE,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE;AAC3B,IAAI,IAAI,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/B;AACA,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACtC,MAAM,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;AACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,KAAK;AACL;AACA,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACxD,IAAI,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AAC5E;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACpE;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE;AAC3B,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7C,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE;AACxB,MAAM,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AACnC,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE;AACvB,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAClC,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE;AACvC,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;AACvC,MAAM,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;AACvC,KAAK;AACL;AACA,IAAI,OAAO,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;AACzE,MAAM,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,EAAE;AAC5C,QAAQ,MAAM,EAAE,GAAG,YAAY;AAC/B,UAAU,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC9D,UAAU,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,UAAU,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AACvC,SAAS,CAAC;AACV;AACA,QAAQ,EAAE,CAAC,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACnE,QAAQ,EAAE,CAAC,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAClE,OAAO;AACP,MAAM,MAAM,KAAK,GAAG,EAAE;AACtB,SAAS,MAAM,CAAC,YAAY,CAAC;AAC7B,SAAS,IAAI,EAAE;AACf,SAAS,qBAAqB,EAAE,CAAC,KAAK,CAAC;AACvC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;AACvD,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;AACpD,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE;AACzC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO;AAC/B;AACA,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;AAC1C;AACA,IAAI,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC7E,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC;AACvB;AACA,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACxE,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;AACA,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE;AACvB,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY;AAC9C,QAAQ,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,OAAO,CAAC;AACR,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACjE,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;AAC9B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACpE,KAAK,MAAM;AACX,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3D,KAAK;AACL;AACA,IAAI,IAAI,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC;AACpC,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC7B;AACA,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;AAC9B,KAAK;AACL;AACA;AACA,IAAI,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACjC;AACA,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK;AAChC,MAAM,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM;AACzC,QAAQ,SAAS,GAAG,UAAU,CAAC,MAAM;AACrC,UAAU,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACtD,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM;AAC5C,YAAY,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAC3D,YAAY,EAAE,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAChC,YAAY,GAAG,EAAE,CAAC;AAClB,WAAW,CAAC,CAAC;AACb;AACA,UAAU,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC;AACtD,UAAU,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC;AACtD;AACA,UAAU,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;AAChC,aAAa,UAAU,EAAE;AACzB,aAAa,QAAQ,CAAC,GAAG,CAAC;AAC1B,aAAa,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;AAC7C,aAAa,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;AAC7C;AACA;AACA,UAAU,IAAI,WAAW,EAAE;AAC3B,YAAY,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAChC,YAAY,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;AACnC,eAAe,UAAU,EAAE;AAC3B,eAAe,QAAQ,CAAC,IAAI,CAAC;AAC7B,eAAe,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACnC,YAAY,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAC9D,YAAY,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAC9D,WAAW,MAAM;AACjB,YAAY,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;AACnC,eAAe,UAAU,EAAE;AAC3B,eAAe,QAAQ,CAAC,IAAI,CAAC;AAC7B,eAAe,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACnC,YAAY,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC/D,YAAY,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC/D,YAAY,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAC/E,YAAY,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5E,WAAW;AACX;AACA,UAAU,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACpD;AACA,UAAU,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACnD,YAAY,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrE;AACA,YAAY,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;AAClC,eAAe,IAAI,CAAC,EAAE,CAAC;AACvB,eAAe,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AAClC,eAAe,UAAU,EAAE;AAC3B;AACA,eAAe,QAAQ,CAAC,aAAa,GAAG,CAAC,CAAC;AAC1C,eAAe,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACnC;AACA,YAAY,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AACnC,cAAc,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACxD,cAAc,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACrD,cAAc,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;AAChE,gBAAgB,sBAAsB,EAAE,CAAC;AACzC,eAAe,CAAC,CAAC;AACjB,cAAc,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACnE,aAAa,CAAC,CAAC;AACf,WAAW;AACX,SAAS;AACT;AACA,QAAQ,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;AACxC,OAAO,CAAC,CAAC;AACT,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,cAAc,GAAG;AAClC,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AACxC;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnD,MAAM,IAAI,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AACpC;AACA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS;AAC1C;AACA;AACA,MAAM;AACN,QAAQ,MAAM,CAAC,SAAS;AACxB,QAAQ,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM;AAClC,QAAQ,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACxC,QAAQ,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;AACrD,QAAQ;AACR,QAAQ,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAC/C;AACA,QAAQ,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC;AAClC,QAAQ,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAChC,QAAQ,MAAM,GAAG,SAAS,CAAC;AAC3B,QAAQ,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AACrC,QAAQ,SAAS;AACjB,OAAO;AACP;AACA,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AAC/B,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC/B;AACA;AACA;AACA,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACjC,QAAQ,IAAI,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC5C,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC;AACrB;AACA;AACA,QAAQ;AACR,UAAU,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC9C,UAAU,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,UAAU;AACjD,UAAU;AACV,UAAU,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACvC,UAAU,OAAO,GAAG,QAAQ,CAAC;AAC7B,SAAS;AACT;AACA,QAAQ,IAAI,MAAM,GAAG;AACrB,UAAU,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5B,UAAU,IAAI,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;AAC7C,SAAS,CAAC;AACV,QAAQ,IAAI,MAAM,GAAG,MAAM,CAAC;AAC5B;AACA,QAAQ,IAAI,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE;AAC5C,UAAU,MAAM,GAAG;AACnB,YAAY,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC;AACnC,YAAY,IAAI,EAAE;AAClB,cAAc,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;AAC1C,cAAc,QAAQ,EAAE,IAAI;AAC5B,cAAc,WAAW,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;AAChE,cAAc,QAAQ,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG;AAC1D,aAAa;AACb,YAAY,IAAI,EAAE;AAClB,cAAc,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;AAClE,gBAAgB,OAAO;AACvB,kBAAkB,GAAG,CAAC;AACtB,kBAAkB,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AAC1D,iBAAiB,CAAC;AAClB,eAAe,CAAC;AAChB,aAAa;AACb,WAAW,CAAC;AACZ,SAAS;AACT;AACA;AACA,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AACpC,UAAU,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,UAAU,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;AAC3C,UAAU,MAAM,GAAG,aAAa,CAAC;AACjC,SAAS;AACT;AACA,QAAQ,MAAM,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC7C;AACA,QAAQ,IAAI,EAAE,EAAE;AAChB,UAAU,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7E,UAAU,aAAa,CAAC,CAAC,CAAC,GAAG;AAC7B,YAAY,MAAM,EAAE,IAAI,CAAC,gBAAgB;AACzC,YAAY,QAAQ;AACpB,WAAW,CAAC;AACZ,SAAS;AACT,OAAO,MAAM,IAAI,KAAK,KAAK,iBAAiB,CAAC,IAAI,EAAE;AACnD,QAAQ,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACzD;AACA,QAAQ,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAC/E,QAAQ,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AACvD;AACA;AACA,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;AAClE,UAAU,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;AAC3C,cAAc,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;AACvC,cAAc,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnC;AACA,UAAU,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,UAAU,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG;AAC7B,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;AACtC,WAAW,CAAC;AACZ,UAAU,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG;AAC7B,YAAY,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;AACtC,WAAW,CAAC;AACZ,SAAS;AACT;AACA,QAAQ,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;AACpC,OAAO;AACP,WAAW,IAAI,KAAK,KAAK,iBAAiB,CAAC,MAAM,EAAE;AACnD,QAAQ,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;AACvD,OAAO;AACP;AACA;AACA,WAAW,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACnE,QAAQ,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AACxC;AACA,QAAQ,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC9B;AACA,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,UAAU,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3B;AACA;AACA,UAAU,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;AACpD,YAAY,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAY,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3C,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AACpC,WAAW,MAAM;AACjB,YAAY,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrC,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE;AAC5B,QAAQ,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7C,QAAQ,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C;AACA;AACA,QAAQ,IAAI,KAAK,IAAI,IAAI,EAAE;AAC3B,UAAU,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,UAAU,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;AACrC,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;AAChD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,WAAW,GAAG;AACzB,IAAI,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;AACzC,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE;AACpB,QAAQ,OAAO,CAAC,CAAC;AACjB,OAAO;AACP;AACA,MAAM,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtE,MAAM,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACpC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,UAAU,GAAG;AAC9B,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,MAAM,EAAE,CAAC;AACf;AACA,MAAM,MAAM,EAAE;AACd,QAAQ,CAAC,EAAE;AACX,UAAU,eAAe,EAAE,MAAM;AACjC,SAAS;AACT,QAAQ,CAAC,EAAE;AACX,UAAU,eAAe,EAAE,MAAM;AACjC,SAAS;AACT,OAAO;AACP;AACA,MAAM,KAAK,EAAE;AACb,QAAQ,KAAK,EAAE;AACf,UAAU,MAAM,EAAE;AAClB,YAAY,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;AAC7B,YAAY,IAAI,EAAE;AAClB,cAAc,IAAI,EAAE,CAAC,WAAW,CAAC;AACjC,cAAc,MAAM,EAAE,IAAI;AAC1B,cAAc,KAAK,EAAE,IAAI;AACzB,cAAc,IAAI,EAAE,IAAI;AACxB,aAAa;AACb,YAAY,MAAM,EAAE;AACpB,cAAc,MAAM,EAAE,IAAI;AAC1B,cAAc,KAAK,EAAE,IAAI;AACzB,cAAc,IAAI,EAAE,IAAI;AACxB,aAAa;AACb,WAAW;AACX,SAAS;AACT,OAAO;AACP,MAAM,aAAa,EAAE,aAAa;AAClC,KAAK,CAAC;AACN;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/C,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAChC;AACA,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAChC;AACA,MAAM,IAAI;AACV,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC;AACxB;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,UAAU,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC7D,YAAY,GAAG,OAAO;AACtB,YAAY,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;AAC5C,YAAY,aAAa,EAAE,aAAa,GAAG,CAAC;AAC5C,WAAW,CAAC,CAAC;AACb;AACA,UAAU,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5D;AACA;AACA;AACA,UAAU,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AAClC,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;AAC1C,cAAc,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzD,cAAc,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;AAC9D,gBAAgB,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG;AACpC,kBAAkB,IAAI,EAAE,CAAC,WAAW,CAAC;AACrC,kBAAkB,MAAM,EAAE,IAAI;AAC9B,kBAAkB,KAAK,EAAE,IAAI;AAC7B,kBAAkB,IAAI,EAAE,IAAI;AAC5B,iBAAiB,CAAC;AAClB,eAAe;AACf,aAAa;AACb,WAAW,CAAC,CAAC;AACb;AACA,UAAU,MAAM,CAAC,IAAI,CAAC;AACtB,YAAY,MAAM,EAAE,IAAI;AACxB,YAAY,MAAM,EAAE,IAAI;AACxB,YAAY,OAAO,EAAE,QAAQ;AAC7B,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,WAAW,CAAC,CAAC;AACb,SAAS,MAAM;AACf,UAAU,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS;AACvC,YAAY,IAAI,CAAC,MAAM;AACvB,gBAAgB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC5E,gBAAgB,IAAI;AACpB,YAAY,IAAI;AAChB,YAAY,OAAO;AACnB,WAAW,CAAC;AACZ;AACA,UAAU,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC;AAC5D,UAAU,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD;AACA,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,EAAE;AACzD,YAAY,IAAI,CAAC,IAAI,CAAC;AACtB,cAAc,SAAS,EAAE,MAAM;AAC/B,cAAc,MAAM,EAAE;AACtB,gBAAgB,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;AAC3C,eAAe;AACf,cAAc,MAAM,EAAE;AACtB,gBAAgB,QAAQ,EAAE;AAC1B,kBAAkB,KAAK,EAAE,CAAC;AAC1B,iBAAiB;AACjB,eAAe;AACf,aAAa,CAAC,CAAC;AACf,WAAW;AACX;AACA,UAAU,MAAM,CAAC,IAAI,CAAC;AACtB,YAAY,MAAM,EAAE,IAAI;AACxB,YAAY,MAAM,EAAE,IAAI;AACxB,YAAY,OAAO,EAAE,QAAQ;AAC7B,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,WAAW,CAAC,CAAC;AACb,SAAS;AACT,OAAO,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,OAAO,GAAG;AACrB,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC5B,IAAI,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AACxC,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;AACvD,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpB,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,SAAS,GAAG;AACvB,IAAI,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AAC5C;AACA,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;AACpB;AACA,IAAI,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK;AAChC,MAAM,MAAM,IAAI,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC;AAC1C;AACA,MAAM,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK;AACvE,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AACtC;AACA,QAAQ,IAAI,IAAI,EAAE;AAClB,UAAU,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AACnC,YAAY,IAAI,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAChD,YAAY,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;AACzB,YAAY,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9C,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;AACtB,WAAW,CAAC,CAAC;AACb,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN;AACA,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,SAAS,CAAC,OAAO,EAAE;AAC9B,IAAI,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AACvD;AACA,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;AACxB,MAAM,aAAa,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,KAAK;AACL;AACA,IAAI,IAAI,UAAU;AAClB,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB;AACA,IAAI,MAAM,aAAa,GAAG,MAAM;AAChC,MAAM,IAAI,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;AAChD;AACA,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM;AACrC,QAAQ,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK;AACzE,UAAU,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AAC1C,SAAS,CAAC,CAAC;AACX,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnB,KAAK,CAAC;AACN;AACA,IAAI,IAAI,QAAQ,GAAG,GAAG,CAAC;AACvB,IAAI,IAAI,SAAS,GAAG,GAAG,CAAC;AACxB;AACA,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK;AAChC,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK;AAClC,QAAQ,MAAM,IAAI,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC;AAC5C,QAAQ,MAAM,KAAK,GAAG,QAAQ;AAC9B,WAAW,aAAa,CAAC,UAAU,CAAC;AACpC,WAAW,qBAAqB,EAAE,CAAC;AACnC;AACA,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;AAC3D,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;AAC/D;AACA,QAAQ,IAAI,IAAI,EAAE;AAClB,UAAU,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;AAClD;AACA,UAAU,UAAU,CAAC,MAAM;AAC3B,YAAY,OAAO,CAAC,SAAS;AAC7B,cAAc;AACd,gBAAgB,MAAM;AACtB,gBAAgB,QAAQ,EAAE,QAAQ;AAClC,gBAAgB,SAAS,EAAE,SAAS;AACpC,gBAAgB,aAAa,EAAE,GAAG;AAClC,eAAe;AACf,cAAc,UAAU,GAAG,EAAE;AAC7B,gBAAgB,IAAI,OAAO,EAAE;AAC7B,kBAAkB,WAAW,CAAC,KAAK,CAAC,CAAC;AACrC,kBAAkB,aAAa,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,iBAAiB;AACjB;AACA,gBAAgB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AAChC,kBAAkB,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;AACxC;AACA,kBAAkB,IAAI,OAAO,EAAE;AAC/B,oBAAoB,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;AAClE,mBAAmB;AACnB,kBAAkB,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7B,iBAAiB,MAAM;AACvB,kBAAkB,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpE,iBAAiB;AACjB,eAAe;AACf,aAAa,CAAC;AACd,WAAW,EAAE,IAAI,CAAC,CAAC;AACnB,SAAS,MAAM;AACf,UAAU,UAAU,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;AAClD,UAAU,UAAU,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAChD,SAAS;AACT,OAAO,CAAC;AACR;AACA,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrB,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,aAAa,CAAC,GAAG,EAAE,UAAU,EAAE;AAC1C,IAAI,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AAC9D,IAAI,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACvC;AACA,IAAI,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE;AACzC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB,KAAK;AACL;AACA,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AACzB,MAAM,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC7C;AACA,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE;AAC5B,QAAQ,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAChD,OAAO,MAAM;AACb,QAAQ,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AACvC,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,WAAW,CAAC,OAAO,EAAE;AAChC,IAAI,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AAC3C,IAAI,IAAI,SAAS,GAAG,iBAAiB,CAAC;AACtC;AACA,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,SAAS,GAAG,qBAAqB,CAAC;AACxC,KAAK;AACL;AACA,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC9D,GAAG;AACH;AACA,EAAE,IAAI,EAAE,CAAC;AACT;AACA,EAAE,OAAO;AACT,IAAI,OAAO;AACX,IAAI,IAAI;AACR,IAAI,SAAS;AACb,IAAI,SAAS;AACb,IAAI,YAAY;AAChB,IAAI,SAAS,EAAE,MAAM,MAAM;AAC3B,GAAG,CAAC;AACJ;;;;;;;;;;;;;;;;;;;;;;;"}
\ No newline at end of file
diff --git a/inst/htmlwidgets/js/src/dist/datamations.min.js.map b/inst/htmlwidgets/js/src/dist/datamations.min.js.map
index 7838ce17..e5cb0a76 100644
--- a/inst/htmlwidgets/js/src/dist/datamations.min.js.map
+++ b/inst/htmlwidgets/js/src/dist/datamations.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"datamations.min.js","sources":["../node_modules/regenerator-runtime/runtime.js","../scripts/config.js","../scripts/utils.js","../scripts/layout.js","../scripts/custom-animations.js","../scripts/hack-facet-view.js","../scripts/app.js"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","export const CONF = {\n X_FIELD: \"datamations_x\",\n Y_FIELD: \"datamations_y\",\n ORDER_FIELD: \"datamations_order\",\n SCHEME: \"https://vega.github.io/schema/vega-lite/v4.json\",\n};\n\nexport const IGNORE_FIELDS = [\n 'tooltip', 'x', 'y',\n 'datamations_x', 'datamations_y'\n];\n\nexport const META_PARSE_VALUES = {\n grid: \"grid\",\n jitter: \"jitter\",\n};","import { IGNORE_FIELDS } from \"./config\";\n\n/**\n * Gets selectors for each componenent, such as slider and animation divs\n * @param {String} id root container id where all the animation components are rendered\n * @returns object of selectors\n */\nexport function getSelectors(id) {\n const base = \"#\" + id;\n\n return {\n axisSelector: base + \" .vega-for-axis\",\n visSelector: base + \" .vega-vis\",\n descr: base + \" .description\",\n slider: base + \" .slider\",\n otherLayers: base + \" .vega-other-layers\",\n controls: base + \" .controls-wrapper\",\n exportWrap: base + \" .export-wrapper\",\n exportBtn: base + \" .export-btn\",\n replayBtn: base + \" .replay-btn\",\n };\n}\n\n/**\n * Splits layers into separate vega-lite specifications, removes layer field\n * @param {Object} input vega-lite specification with layers\n * @returns a list of specs\n */\nexport function splitLayers(input) {\n const specArray = [];\n const spec = input.spec;\n\n if (spec && spec.layer) {\n spec.layer.forEach((d, i) => {\n const obj = JSON.parse(JSON.stringify(input));\n const animated = i === spec.layer.length - 1;\n\n if (obj.meta) {\n obj.meta.animated = animated;\n } else {\n obj.meta = { animated };\n }\n\n obj.spec.encoding = d.encoding;\n obj.spec.mark = d.mark;\n delete obj.spec.layer;\n specArray.push(obj);\n });\n } else if (input.layer) {\n input.layer.forEach((d, i) => {\n const obj = JSON.parse(JSON.stringify(input));\n const animated = i === input.layer.length - 1;\n\n if (obj.meta) {\n obj.meta.animated = animated;\n } else {\n obj.meta = { animated };\n }\n\n obj.encoding = d.encoding;\n obj.mark = d.mark;\n delete obj.layer;\n specArray.push(obj);\n });\n }\n\n return specArray;\n}\n\n/**\n * Looks up a word based of buckets and value.\n * Example:\n * - words: ['a', 'b', 'c']\n * - buckets: [10, 20, 30]\n * - value: 25\n * will return 'c'\n * @param {Array} words list of words\n * @param {Array} buckets list of numbers\n * @param {Number} value score to lookup\n */\nexport function lookupByBucket(words, buckets, value) {\n return words[buckets.findIndex((d) => value <= d)];\n}\n\n/**\n * Finds correct number of rows for grid based on biggest group\n * @param {Array} vegaLiteSpecs an array of vega lite specs\n * @returns a number of rows\n */\nexport function getRows(vegaLiteSpecs) {\n let maxRows = 0;\n\n vegaLiteSpecs\n .filter((d) => d.meta.parse === \"grid\")\n .forEach((spec) => {\n let { width: specWidth, height: specHeight } = spec.spec || spec;\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const splitField = spec.meta.splitField;\n const groupKeys = [];\n\n if (spec.facet) {\n if (spec.facet.column) {\n groupKeys.push(spec.facet.column.field);\n }\n if (spec.facet.row) {\n groupKeys.push(spec.facet.row.field);\n }\n }\n\n let specValues = spec.data.values;\n\n const gap = 2;\n const distance = 4 + gap;\n\n let secondarySplit = Object.keys(encoding).filter((d) => {\n const field = encoding[d].field;\n return (\n field !== splitField &&\n IGNORE_FIELDS.indexOf(d) === -1 &&\n groupKeys.indexOf(field) === -1\n );\n })[0];\n\n // combine groups if secondarySplit\n if (splitField && secondarySplit) {\n const secondaryField = encoding[secondarySplit].field;\n const keys = [...groupKeys, splitField];\n\n const grouped = d3.rollups(\n specValues,\n (arr) => {\n const obj = {};\n let sum = 0;\n\n arr.forEach((x) => {\n sum += x.n;\n obj[x[secondaryField]] = sum;\n });\n\n const o = {\n [splitField]: arr[0][splitField],\n [secondaryField]: obj,\n n: sum,\n };\n\n groupKeys.forEach((x) => {\n o[x] = arr[0][x];\n });\n\n return o;\n },\n ...keys.map((key) => {\n return (d) => d[key];\n })\n );\n\n specValues = grouped.flatMap((d) => {\n if (keys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n\n specWidth = specWidth / grouped.length;\n }\n\n const maxN = d3.max(specValues, (d) => d.n);\n\n let rows = Math.ceil(Math.sqrt(maxN));\n let maxCols = Math.ceil(maxN / rows);\n\n // if horizontal gap is less than 5,\n // then take up all vertical space to increase rows and reduce columns\n if (specWidth / maxCols < 5) {\n rows = Math.floor(specHeight / distance);\n }\n\n if (rows > maxRows) {\n maxRows = rows;\n }\n });\n\n return maxRows;\n}\n","/*\n* Layout generation functions for datamations.\n* Supports:\n* - grid view: meta.parse = \"grid\"\n* - jittered view: meta.parse = \"jitter\"\n*/\nimport { CONF, IGNORE_FIELDS } from \"./config\";\nimport { lookupByBucket } from \"./utils\";\n\n/**\n * Generates data for grid specs\n * @param {Object} spec vega-lite spec\n * @param {Number} rows number of rows\n * @param {Boolean} stacked if true, circles are stacked and vertically aliged\n * @returns an array of objects\n */\nexport function generateGrid(spec, rows = 10, stacked = false) {\n const splitField = spec.meta.splitField;\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const groupKeys = [];\n\n let {width: specWidth} = spec.spec || spec;\n\n if (spec.facet) {\n if (spec.facet.column) {\n groupKeys.push(spec.facet.column.field);\n spec.facet.column.sort = { \"field\": CONF.ORDER_FIELD };\n }\n if (spec.facet.row) {\n groupKeys.push(spec.facet.row.field);\n spec.facet.row.sort = { \"field\": CONF.ORDER_FIELD };\n }\n }\n\n let specValues = spec.data.values;\n\n const metas = [];\n\n specValues.forEach((d, i) => {\n d[CONF.ORDER_FIELD] = i;\n if (d.meta) {\n metas.push(...Object.keys(d.meta));\n }\n });\n\n let secondarySplit = Object.keys(encoding).filter(d => {\n const field = encoding[d].field;\n return field !== splitField &&\n IGNORE_FIELDS.indexOf(d) === -1 &&\n groupKeys.indexOf(field) === -1 &&\n metas.indexOf(field) === -1;\n })[0];\n\n let secondaryField = null;\n\n // combine groups\n // for example, if splitField = player, but color = hit:\n\n // { \"n\": 5, \"player\": \"a\", \"hit\": \"yes\" },\n // { \"n\": 10, \"player\": \"a\", \"hit\": \"no\" },\n // { \"n\": 15, \"player\": \"b\", \"hit\": \"yes\" },\n // { \"n\": 35, \"player\": \"b\", \"hit\": \"no\" }\n\n // after this code block we will get:\n // { \"n\": 15, \"player\": \"a\", \"hit\": { \"yes\": 5, \"no\": 10 } },\n // { \"n\": 50, \"player\": \"b\", \"hit\": { \"yes\": 15, \"no\": 35 } },\n\n if (splitField && secondarySplit) {\n secondaryField = encoding[secondarySplit].field;\n const keys = [...groupKeys, splitField];\n\n const grouped = d3.rollups(\n specValues,\n arr => {\n const obj = {};\n let sum = 0;\n\n arr.forEach(x => {\n sum += x.n;\n obj[x[secondaryField]] = sum;\n });\n\n const o = {\n [splitField]: arr[0][splitField],\n [secondaryField]: obj,\n n: sum,\n };\n\n groupKeys.forEach(x => {\n o[x] = arr[0][x];\n });\n\n return o;\n },\n ...keys.map((key) => {\n return (d) => d[key];\n })\n );\n\n specValues = grouped.flatMap((d) => {\n if (keys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n\n specWidth = specWidth / grouped.length;\n }\n\n let maxCols = Math.ceil(d3.max(specValues, d => d.n) / rows);\n let splitOptions = [];\n\n if (splitField) {\n splitOptions = Array.from(\n new Set(specValues.map((d) => d[splitField]))\n )\n }\n\n let counter = 1;\n\n const reduce = (v) => {\n const arr = [];\n\n v.forEach((d, j) => {\n const n = d.n;\n const columns = Math.ceil(n / rows);\n const xCenter = splitField ? splitOptions.indexOf(d[splitField]) + 1 : 1;\n\n let startCol = (xCenter - 1) * maxCols + j; // inner grid start\n startCol += Math.floor((maxCols - columns) / 2); // center alignment\n\n const datum = {};\n\n // remove n and gemini_ids, we won't need them any more\n Object.keys(d).forEach(k => {\n if (k !== 'n' && k !== 'gemini_ids') {\n datum[k] = d[k];\n }\n });\n\n for (let i = 0; i < n; i++) {\n const x = startCol + Math.floor(i / rows);\n const y = rows - 1 - i % rows;\n const colorFieldObj = {};\n\n // for secondary split, e.g. is_hit, find correct key and value\n if (secondaryField && typeof[d[secondaryField]] === \"object\") {\n const keys = Object.keys(d[secondaryField]).sort((a, b) => {\n return d[secondaryField][a] - d[secondaryField][b];\n });\n\n colorFieldObj[secondaryField] = lookupByBucket(\n keys,\n keys.map(k => d[secondaryField][k]),\n i + 1,\n );\n }\n\n arr.push({\n ...datum,\n ...colorFieldObj,\n gemini_id: d.gemini_ids ? d.gemini_ids[i] : counter,\n [CONF.X_FIELD]: stacked ? xCenter : x,\n [CONF.Y_FIELD]: stacked ? i + 1 : y,\n });\n\n counter++;\n }\n });\n\n return arr;\n };\n\n let gridValues = [];\n\n if (groupKeys.length === 0) {\n gridValues = reduce(specValues);\n } else {\n gridValues = d3.rollups(\n specValues,\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n )\n .flatMap((d) => {\n if (groupKeys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n }\n\n const num_groups = splitOptions.length;\n\n return {\n gridValues,\n domain: [\n -maxCols / 2,\n (num_groups * maxCols) + (num_groups - 1) + maxCols / 2 - 1\n ],\n num_groups\n };\n}\n\n/**\n * Generates infogrid specification\n * @param {Object} spec vega-lite specification\n * @param {Number} rows number of rows in a grid\n * @returns grid specification\n */\nexport function getGridSpec(spec, rows = 10, stacked = false) {\n return new Promise((res) => {\n const { gridValues: grid, domain, num_groups } = generateGrid(spec, rows, stacked);\n const obj = {...spec};\n const encoding = obj.spec ? obj.spec.encoding : obj.encoding;\n\n const dx = stacked ? 1 : 1;\n\n const xDomain = stacked || num_groups === 0 ? [\n d3.min(grid, d => d[CONF.X_FIELD]) - dx,\n d3.max(grid, d => d[CONF.X_FIELD]) + dx\n ] : domain;\n\n const yPadding = (spec.facet && spec.facet.row) ? 0.8 : 0.4;\n\n const yDomain = [\n stacked ? 0 : d3.min(grid, (d) => d[CONF.Y_FIELD]) - yPadding,\n d3.max(grid, (d) => d[CONF.Y_FIELD]) + yPadding + (stacked ? 10 : 0),\n ];\n\n const middle = yDomain[0] + (yDomain[1] - yDomain[0]) / 2;\n\n obj.data.values = grid;\n\n encoding.x.scale = {\n type: \"linear\",\n domain: xDomain,\n };\n\n encoding.y.scale = {\n type: \"linear\",\n domain: [\n Math.min(yDomain[0], middle - rows / 2),\n Math.max(yDomain[1], middle + rows / 2)\n ],\n };\n\n encoding.x.field = CONF.X_FIELD;\n encoding.y.field = CONF.Y_FIELD;\n\n // set axis labels when splitField\n if (spec.meta.splitField) {\n const labels = Array.from(\n new Set(grid.map(d => d[spec.meta.splitField]))\n );\n\n const expr = {};\n\n labels.forEach((d) => {\n // find min and max x values for each label\n const extent = d3.extent(\n spec.data.values.filter(x => x[spec.meta.splitField] === d),\n d => d[CONF.X_FIELD],\n );\n\n const middle = Math.ceil(extent[0] + (extent[1] - extent[0]) / 2);\n expr[middle] = d;\n });\n\n spec.meta.rules = obj.meta.rules = labels.map(m => {\n return {\n filter: `datum['${spec.meta.splitField}'] === '${m}'`,\n groupKey: spec.meta.splitField,\n groupValue: m,\n }\n });\n\n encoding.x.axis = {\n labelExpr: `${JSON.stringify(expr)}[datum.label]`,\n values: Object.keys(expr).map(d => +d),\n labelAngle: -90,\n grid: false,\n title: spec.meta.splitField,\n };\n }\n\n return res(obj);\n });\n}\n\n/**\n * Generates jittered specification using d3-force\n * @param {Object} spec vega-lite specification\n * @returns jittered spec\n */\nexport function getJitterSpec(spec) {\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const width = spec.spec ? spec.spec.width : spec.width;\n const nodes = spec.data.values;\n\n const circleRadius = 4;\n\n let innerGroupCount = 1;\n\n if (spec.meta.splitField) {\n innerGroupCount = new Set(\n nodes.map(d => d[spec.meta.splitField])\n ).size;\n }\n\n const facetSize = width ? width : 150;\n const yExtent = d3.extent(nodes, d => d[CONF.Y_FIELD]);\n const xScale = d3.scaleBand()\n .domain(d3.range(1, innerGroupCount + 1))\n .range([0, facetSize])\n .paddingOuter(0.5);\n\n const arr = nodes.slice().filter(d => d[CONF.Y_FIELD] !== undefined).map((d, i) => {\n d.oldX = d[CONF.X_FIELD];\n d.oldY = d[CONF.Y_FIELD];\n\n let x = xScale(d[CONF.X_FIELD]) + xScale.bandwidth() / 2;\n let y = d[CONF.Y_FIELD];\n\n d.scaledX = Math.round(x);\n\n return {\n ...d,\n x: x,\n y: y,\n };\n });\n\n const simulation = d3\n .forceSimulation(arr)\n .force(\"x\", d3.forceX().x(d => d.x))\n .force(\"y\", d3.forceY().strength(0.002).y(d => d[CONF.Y_FIELD]))\n .force(\"collide\", d3\n .forceCollide()\n .strength(0.01)\n .radius(circleRadius)\n )\n .stop();\n\n return new Promise((res) => {\n const bandwidth = xScale.bandwidth() * 0.9;\n\n for (let i = 0; i < 120; i++) {\n simulation.tick();\n\n arr.forEach(d => {\n const x = xScale(d.oldX);\n d.y = d.oldY;\n \n // restrict to the bounds: [5%, 95%] of width\n d.x = Math.max(\n x + xScale.bandwidth() * 0.05,\n Math.min(x + bandwidth, d.x),\n );\n })\n }\n\n if (encoding.y.scale) {\n encoding.y.scale.domain = yExtent\n } else {\n encoding.y.scale = {\n domain: yExtent\n }\n }\n\n encoding.x.scale = {\n domain: [0, facetSize]\n }\n\n // jitter still needs encoding fields to be x and y,\n // because d3-force uses x and y internally.\n encoding.x.field = \"x\";\n encoding.y.field = \"y\";\n\n // if meta.axes is falsy, and we have custom x-axis\n if (!spec.meta.axes && encoding.x.axis && spec.meta.xAxisLabels) {\n const labels = spec.meta.xAxisLabels;\n\n const axisExpr = {};\n const mapped = labels.map((d, i) => {\n const x = Math.round(xScale(i + 1) + xScale.bandwidth() / 2);\n axisExpr[x] = d;\n return { x, label: d };\n });\n\n encoding.x.axis.labelExpr = `${JSON.stringify(axisExpr)}[datum.label]`;\n encoding.x.axis.values = mapped.map(d => d.x);\n }\n\n return res({\n ...spec,\n data: {\n name: \"source\",\n values: arr,\n },\n });\n });\n}","/**\n * Custom animations generation script.\n * Supports:\n * - count\n * - median\n * - mean\n * - quantile\n * - min\n * - max\n * Inspiration from: https://giorgi-ghviniashvili.github.io/aggregate-animation-data/designs/\n */\n\nimport { CONF } from \"./config\";\nimport { getGridSpec } from \"./layout\";\n\n/**\n * Generates a spec for count animation\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {Object} shrink if truthy, circles will be pulled up\n * @returns a vega lite spec\n */\nexport const getCountStep = (source, target, shrink = false) => {\n const { width, height } = target.spec || target;\n let values = source.data.values.slice();\n const sourceMeta = source.meta;\n\n // generate rules layer\n const rules = sourceMeta.rules.map((d, i) => {\n const n = sourceMeta.rules.length;\n return {\n transform: [{ filter: d.filter }],\n name: `rule-${i + 1}`,\n mark: {\n type: \"rule\",\n x: { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: \"count\",\n // axis: null,\n },\n },\n };\n });\n\n if (shrink) {\n values = values.map((d, i) => {\n const y = target.data.values[i][CONF.Y_FIELD];\n return {\n ...d,\n [CONF.Y_FIELD]: y,\n };\n });\n }\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: source.encoding,\n },\n ...rules,\n ],\n };\n};\n\n/**\n * Generates a spec for median and quantile animations\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {Number} step step counter. null is the last step\n * @param {Number} p a percentile\n * @returns a vega lite spec\n */\nexport const getMedianStep = (source, target, step = 0, p = 0.5) => {\n const all_groups = [];\n const { width, height } = target.spec || target;\n const isLast = step === null;\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n const values = [];\n\n const reduce = (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n\n let sorted = data\n .slice()\n .sort((a, b) => {\n const sortFn = hasFacet ? \"descending\" : \"ascending\";\n return d3[sortFn](a[CONF.Y_FIELD], b[CONF.Y_FIELD]);\n })\n .map((d, i) => {\n return {\n ...d,\n rank: i + 1,\n };\n });\n\n // inspired by median animation https://uwdata.github.io/gemini2-editor/ \n const y_median = d3.quantile(sorted, p, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const y_median_pos = hasFacet ? data[0].scaleY(y_median) : y_median;\n const median_rank = d3.quantile(sorted, 0.5, (d) => d.rank);\n const max_rank = d3.max(sorted, (d) => d.rank);\n const diff = isLast ? null : max_rank - median_rank - step;\n const dx = hasFacet ? 5 : 0.1;\n\n sorted = sorted.map((d) => {\n const rank_delta_abs = Math.abs(d.rank - median_rank);\n const y_delta = (hasFacet ? d.oldY : d[CONF.Y_FIELD]) - y_median;\n const bisection =\n diff !== null && rank_delta_abs <= diff ? 0 : y_delta > 0 ? 1 : -1;\n\n let newField = null;\n\n if (bisection === -1) {\n newField = d[CONF.X_FIELD] - dx;\n } else if (bisection === 1) {\n newField = d[CONF.X_FIELD] + dx;\n } else {\n newField = d[CONF.X_FIELD];\n }\n\n return {\n ...d,\n bisection,\n [CONF.X_FIELD + \"_pos\"]: newField,\n y_median,\n y_median_pos,\n };\n });\n\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue} && datum.bisection === 0`;\n let groupFilter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupFilter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupFilter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupFilter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupFilter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n all_groups.push({\n filter,\n groupFilter,\n groupValue,\n groupKey: CONF.X_FIELD,\n median: y_median,\n groupId,\n median_pos: y_median_pos,\n rankDiff: Math.abs(max_rank - median_rank),\n rule_start: d3.min(sorted, (d) => d[CONF.X_FIELD + \"_pos\"]) + 1,\n rule_end: d3.max(sorted, (d) => d[CONF.X_FIELD + \"_pos\"]) - 1,\n });\n\n values.push(...sorted);\n };\n\n const groupKeys = [CONF.X_FIELD];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n d3.rollup(\n source.data.values.slice(),\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = [];\n\n let ruleField = isLast ? \"y_median\" : CONF.Y_FIELD;\n\n if (hasFacet) {\n ruleField = isLast ? \"y_median_pos\" : CONF.Y_FIELD;\n }\n\n all_groups.forEach((d, i) => {\n const n = all_groups.length;\n\n const top_rule = {\n transform: isLast ? [{ filter: d.groupFilter }] : [{ filter: d.filter }],\n name: `top_rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? d.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: ruleField,\n type: \"quantitative\",\n aggregate: \"max\",\n axis: null,\n },\n },\n };\n\n const bottom_rule = {\n transform: isLast ? [{ filter: d.groupFilter }] : [{ filter: d.filter }],\n name: `bottom_rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? d.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: ruleField,\n type: \"quantitative\",\n aggregate: \"min\",\n axis: null,\n },\n },\n };\n\n rules.push(top_rule, bottom_rule);\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n x: {\n ...source.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n color: source.encoding.color\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Generates a spec for mean animation\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @returns a vega lite spec\n */\nexport const getMeanStep = (source, target) => {\n const all_groups = [];\n const { width, height } = target.spec || target;\n const domain = source.encoding.y.scale.domain;\n\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n\n const values = [];\n\n const reduce = (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n\n let sorted = data\n .slice()\n .sort((a, b) => {\n const sortFn = hasFacet ? \"descending\" : \"ascending\";\n return d3[sortFn](a[CONF.Y_FIELD], b[CONF.Y_FIELD]);\n })\n .map((d, i) => {\n return {\n ...d,\n rank: i + 1,\n };\n });\n\n const y_mean = d3.mean(sorted, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const y_mean_pos = hasFacet ? data[0].scaleY(y_mean) : y_mean;\n const mean_rank = d3.mean(sorted, (d) => d.rank);\n const max_rank = d3.max(sorted, (d) => d.rank);\n const dividor = max_rank * 1.4;\n const multiplier = hasFacet ? 25 : 1;\n\n sorted = sorted.map((d) => {\n const rankRatio_from_mean = (d.rank - mean_rank) / dividor;\n\n const rankRatio_from_mean_start = (d.rank - 0.5 - mean_rank) / dividor;\n const rankRatio_from_mean_end = (d.rank + 0.5 - mean_rank) / dividor;\n\n return {\n ...d,\n [CONF.X_FIELD + \"_pos\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean * multiplier,\n [CONF.X_FIELD + \"_pos_start\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean_start * multiplier,\n [CONF.X_FIELD + \"_pos_end\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean_end * multiplier,\n y_mean,\n y_mean_pos,\n };\n });\n\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n all_groups.push({\n filter,\n groupValue,\n groupKey: CONF.X_FIELD,\n groupId: groupId,\n mean: y_mean,\n mean_pos: y_mean_pos,\n rule_start: d3.min(sorted, (d) => d[CONF.X_FIELD + \"_pos_start\"]),\n rule_end: d3.max(sorted, (d) => d[CONF.X_FIELD + \"_pos_end\"]),\n });\n\n values.push(...sorted);\n\n return sorted;\n };\n\n const groupKeys = [CONF.X_FIELD];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n d3.rollups(\n source.data.values.slice(),\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = [];\n\n all_groups.forEach((d, i) => {\n const n = all_groups.length;\n\n const rule = {\n transform: [{ filter: d.filter }],\n name: `rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : {\n expr: `${i + 1} * (width / ${n + 1}) - (width / ${n + 1}) * 0.35`,\n },\n x2: hasFacet\n ? d.rule_end\n : {\n expr: `${i + 1} * (width / ${n + 1}) + (width / ${n + 1}) * 0.35`,\n },\n },\n encoding: {\n y: {\n field: hasFacet ? \"y_mean_pos\" : CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: \"mean\",\n axis: null,\n scale: { domain },\n },\n },\n };\n\n rules.push(rule);\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n x: {\n ...source.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Generates a spec for min and max animations\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {String} minOrMax \"min\" or \"max\"\n * @returns a vega lite spec\n */\nexport const getMinMaxStep = (source, target, minOrMax = \"min\") => {\n const { width, height } = target.spec || target;\n const aggrFn = minOrMax === \"min\" ? d3.min : d3.max;\n const domain = source.encoding.y.scale.domain;\n const groupKeys = [CONF.X_FIELD];\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n\n const values = [];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n const all_groups = [];\n\n d3.rollup(\n source.data.values.slice(),\n (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n const aggr = aggrFn(data, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const aggr_pos = hasFacet ? data[0].scaleY(aggr) : aggr;\n\n all_groups.push({\n filter,\n groupValue,\n groupKey: CONF.X_FIELD,\n aggr,\n aggr_pos,\n groupId,\n rule_start: d3.min(data, (d) => d[CONF.X_FIELD] - 2),\n rule_end: d3.max(data, (d) => d[CONF.X_FIELD] + 2),\n });\n\n const g = data.find((d) => {\n const v = hasFacet ? d.oldY : d[CONF.Y_FIELD];\n return v === aggr;\n });\n\n values.push(\n ...data.map((d) => {\n const isAggr = g && g.gemini_id === d.gemini_id;\n\n return {\n ...d,\n isAggr,\n aggr_pos,\n };\n })\n );\n },\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = all_groups.map((group, i) => {\n const n = all_groups.length;\n return {\n transform: [{ filter: group.filter }],\n name: `rule_${group.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? group.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? group.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: hasFacet ? \"aggr_pos\" : CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: minOrMax,\n axis: null,\n scale: { domain },\n },\n },\n };\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values: values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Configuration for custom animations.\n * When meta.custom_animation is present, \n * it looks up a function here and generates custom animation specifications\n */\nexport const CustomAnimations = {\n /**\n * steps:\n * 1) stack sets\n * 2) put rules (lines) using aggregate count\n * 3) replace with count bubbles (aggregate count) (basically target spec)\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n count: async (rawSource, target) => {\n const stacks = await getGridSpec(rawSource, 10, true);\n delete stacks.encoding.y.axis;\n const rules = getCountStep(rawSource, target, false);\n const pullUp = getCountStep(rawSource, target, true);\n return [stacks, rules, pullUp, target];\n },\n /**\n * min animation steps:\n * 1) source spec\n * 2) stack sets, with a rule line at min circle\n * 3) pull circles down\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n min: (rawSource, target) => {\n const step_1 = getMinMaxStep(rawSource, target, \"min\");\n\n const step_2 = {\n ...step_1,\n transform: [{ filter: \"datum.isAggr === true\" }],\n layer: [\n {\n ...step_1.layer[0],\n encoding: {\n ...step_1.layer[0].encoding,\n y: {\n ...step_1.layer[0].encoding.y,\n aggregate: \"min\",\n },\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n\n return [rawSource, step_1, step_2, target];\n },\n /**\n * max animation steps:\n * 1) source spec\n * 2) stack sets, with a rule line at max circle\n * 3) pull circles up\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n max: (rawSource, target, source) => {\n const step_1 = getMinMaxStep(rawSource, target, \"max\");\n\n const step_2 = {\n ...step_1,\n transform: [{ filter: \"datum.isAggr === true\" }],\n layer: [\n {\n ...step_1.layer[0],\n encoding: {\n ...step_1.layer[0].encoding,\n y: {\n ...step_1.layer[0].encoding.y,\n aggregate: \"max\",\n },\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n\n return [rawSource, step_1, step_2, target];\n },\n /**\n * mean animation steps:\n * 1) source spec\n * 2) intermediate: circles will be placed diagonally \"/\" \n * 3) add lines (rules) at mean level\n * 4) convert circles to small ticks\n * 5) show vertical lines\n * 6) collapse the lines to mean level\n * 7) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n mean: (rawSource, target) => {\n const step_1 = getMeanStep(rawSource, target);\n\n const barWidth = 2;\n\n const step_2 = {\n ...step_1,\n layer: [\n {\n name: \"main\",\n mark: { type: \"tick\", orient: \"horizontal\", width: barWidth },\n encoding: {\n y: {\n ...rawSource.encoding.y,\n },\n x: {\n ...rawSource.encoding.x,\n field: CONF.X_FIELD + \"_pos_start\",\n },\n x2: {\n field: CONF.X_FIELD + \"_pos_end\",\n },\n color: rawSource.encoding.color\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n const step_3 = {\n ...step_2,\n layer: [\n {\n ...step_2.layer[0],\n mark: {\n type: \"bar\",\n width: barWidth,\n },\n encoding: {\n ...step_2.layer[0].encoding,\n y2: {\n field: \"y_mean_pos\",\n },\n },\n },\n ...step_2.layer.slice(1),\n ],\n };\n const step_4 = {\n ...step_2,\n layer: [\n {\n ...step_2.layer[0],\n mark: {\n type: \"bar\",\n width: barWidth,\n },\n encoding: {\n ...step_2.layer[0].encoding,\n y: {\n ...step_2.layer[0].encoding.y,\n field: \"y_mean_pos\",\n },\n y2: {\n field: \"y_mean_pos\",\n },\n },\n },\n ...step_2.layer.slice(1),\n ],\n };\n\n const intermediate = {\n ...rawSource,\n data: {\n values: step_1.data.values,\n },\n encoding: {\n ...rawSource.encoding,\n x: {\n ...rawSource.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n },\n };\n\n return [rawSource, intermediate, step_1, step_2, step_3, step_4, target];\n },\n /**\n * median and quantile animation steps:\n * 1) source spec\n * 2) show rules at the top and bottom\n * 3) split circles by median and move to the right and left and move rules to median level\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n median: (rawSource, target, calculatedSource, p) => {\n const percent = (p === undefined || p === null) ? 0.5 : p;\n const initial = getMedianStep(rawSource, target, 0, percent);\n const last_with_points = getMedianStep(rawSource, target, null, percent);\n\n return [\n rawSource,\n initial,\n last_with_points,\n target\n ];\n },\n};\n","/**\n * Hack faceted view since gemini.js does not support multi view animations\n * Finding coordinates of each circle and treat them as real values in the one axis view \n * Adding axis layer underneath to look exactly same as faceted view\n */\n\nimport { CONF, META_PARSE_VALUES } from \"./config\";\n\n/**\n * Get empty spec, if no data is present\n * @param {Object} spec \n * @returns vega-lite spec\n */\nexport function getEmptySpec(spec) {\n const description = spec.meta.description;\n const splitField = spec.meta.splitField;\n\n return {\n $scheme: CONF.SCHEME,\n width: 300,\n height: 300,\n meta: {\n description,\n axes: false,\n },\n data: {\n values: [\n {\n [CONF.X_FIELD]: 0,\n [CONF.Y_FIELD]: 0,\n },\n ],\n },\n mark: {\n type: \"point\",\n filled: true,\n strokeWidth: 1,\n color: \"transparent\",\n },\n encoding: {\n x: {\n field: CONF.X_FIELD,\n type: \"quantitative\",\n scale: {\n domain: [-5, 5],\n },\n axis: {\n grid: false,\n ticks: false,\n title: splitField,\n domain: false,\n values: [],\n },\n },\n y: {\n field: CONF.Y_FIELD,\n type: \"quantitative\",\n scale: {\n domain: [-5, 5],\n },\n axis: {\n grid: false,\n ticks: false,\n title: null,\n domain: false,\n values: [],\n },\n },\n },\n };\n}\n\n/**\n * Creates and returns a template for vega spec\n * @param {Number} width spec width\n * @param {Number} height spec height\n * @param {Object} axes which axes to add\n * @param {Object} spec original spec\n * @returns vega-lite spec\n */\nexport function getSpecTemplate(width, height, axes = { x: true, y: true }, spec) {\n const encoding = spec.spec.encoding;\n const mark = spec.spec.mark;\n const facet = spec.facet;\n\n if (encoding.x) {\n const title = facet && facet.column ? facet.column.title : null;\n\n encoding.x = {\n field: CONF.X_FIELD,\n type: \"quantitative\",\n scale: {},\n axis: axes.x\n ? {\n labelExpr: \"\",\n values: [],\n title: title,\n grid: false,\n orient: \"top\",\n ticks: false,\n domain: false,\n labelPadding: 10,\n }\n : null,\n };\n }\n\n if (encoding.y) {\n const title = facet && facet.row ? facet.row.title : null;\n\n encoding.y = {\n field: spec.spec.mark === \"errorbar\" ? encoding.y.field : CONF.Y_FIELD,\n type: \"quantitative\",\n scale: {},\n axis: axes.y\n ? {\n labelExpr: \"\",\n values: [],\n title: title,\n grid: false,\n labelAngle: 90,\n domain: false,\n ticks: false,\n labelPadding: 10,\n orient: \"right\",\n }\n : null,\n };\n }\n\n const additionals = {};\n\n if (spec.transform) {\n additionals.transform = spec.transform;\n }\n\n return {\n $schema: CONF.SCHEME,\n data: {\n values: [],\n },\n width: width,\n height: height,\n mark: mark,\n encoding: encoding,\n ...additionals,\n };\n}\n\n/**\n * Get hacked spec\n * Finding coordinates of each circle and treat them as real values in the one axis view \n * Adding axis layer underneath to look exactly same as faceted view\n * @param {Object} param0 parameters\n * @param {Object} param0.view a vega view instance\n * @param {Object} param0.spec a vega spec\n * @param {Object} param0.width spec width\n * @param {Object} param0.height spec height\n * @returns vega-lite spec\n */\nexport function getHackedSpec({ view, spec, width = 600, height = 600 }) {\n const rowId = spec.facet.row ? spec.facet.row.field : null;\n const colId = spec.facet.column ? spec.facet.column.field : null;\n\n const newSpec = getSpecTemplate(\n width,\n height,\n {\n x: colId,\n y: rowId,\n },\n spec\n );\n\n const yDomain = [height, 0];\n const xDomain = [0, width];\n\n const values = [];\n\n const colMap = new Map();\n const rowMap = new Map();\n\n const scaleX = view.scale(\"x\");\n const scaleY = view.scale(\"y\");\n const source = view.data(\"source\");\n\n let row_header, column_header;\n\n // y axis\n if (rowId && (row_header = view.data(\"row_header\"))) {\n const yAxisValues = [];\n const yAxisExpr = {};\n\n row_header.forEach((d, i) => {\n const bounds = d.bounds;\n const name = d.datum[rowId];\n const y1 = bounds.y1;\n const y2 = bounds.y2;\n\n rowMap.set(name, y1);\n\n const yCoord = Math.round(y1 + (y2 - y1) / 2);\n\n yAxisValues.push(yCoord);\n yAxisExpr[yCoord] = name;\n });\n\n yDomain[1] = d3.min(row_header, (d) => d.bounds.y1);\n yDomain[0] = d3.max(row_header, (d) => d.bounds.y2);\n\n newSpec.encoding.y.axis.values = yAxisValues;\n newSpec.encoding.y.axis.labelExpr = `${JSON.stringify(\n yAxisExpr\n )}[datum.label]`;\n }\n\n // x axis\n if (colId && (column_header = view.data(\"column_header\"))) {\n const xAxisValues = [];\n const xAxisExpr = {};\n\n column_header.forEach((d, i) => {\n const bounds = d.bounds;\n\n const name = d.datum[colId];\n colMap.set(name, bounds.x1);\n\n const xCoord = Math.round(bounds.x1 + (bounds.x2 - bounds.x1) / 2);\n\n xAxisValues.push(xCoord);\n xAxisExpr[xCoord] = name;\n });\n\n xDomain[0] = d3.min(column_header, (d) => d.bounds.x1);\n xDomain[1] = d3.max(column_header, (d) => d.bounds.x2);\n\n newSpec.encoding.x.axis.values = xAxisValues;\n newSpec.encoding.x.axis.labelExpr = `${JSON.stringify(\n xAxisExpr\n )}[datum.label]`;\n }\n\n // generating data.values\n source.forEach((d) => {\n const col = d[colId];\n const row = d[rowId];\n\n const xStart = colMap.get(col) || 0;\n const yStart = rowMap.get(row) || 0;\n\n const xField = spec.meta.parse === META_PARSE_VALUES.jitter ? \"x\" : CONF.X_FIELD;\n const yField = spec.meta.parse === META_PARSE_VALUES.jitter ? \"y\" : CONF.Y_FIELD;\n\n const xCoord = xStart + scaleX(d[xField]);\n\n values.push({\n ...d,\n [CONF.X_FIELD]: xCoord,\n [CONF.Y_FIELD]: yStart + scaleY(d[yField]),\n [CONF.X_FIELD + \"_num\"]: d.scaledX ? xStart + scaleX(d.scaledX) : xCoord,\n scaleX: (val) => yStart + scaleX(val),\n scaleY: (val) => yStart + scaleY(val),\n });\n });\n\n newSpec.encoding.x.scale.domain = xDomain;\n newSpec.encoding.y.scale.domain = yDomain;\n newSpec.data.values = values;\n newSpec.width = xDomain[1] - xDomain[0];\n newSpec.height = yDomain[0] - yDomain[1];\n\n return newSpec;\n}\n\n/**\n * turns faceted spec to regular spec, using hacking technique\n * @param {Object} spec vega lite spec with facets\n * @returns vega-lite spec\n */\nexport function hackFacet(spec) {\n const div = document.createElement(\"div\");\n\n spec.data.name = \"source\";\n\n return vegaEmbed(div, spec, { renderer: \"svg\" }).then((resp) => {\n const newSpec = getHackedSpec({\n ...resp,\n width: spec.spec.width,\n height: spec.spec.height,\n });\n\n if (spec.config) {\n newSpec.config = spec.config;\n }\n\n if (spec.meta) {\n newSpec.meta = spec.meta;\n }\n\n let [transformX, transformY] = resp.view._origin;\n\n if (!(spec.facet && spec.facet.row && !spec.facet.column)) {\n transformY = 0;\n }\n\n if (newSpec.meta) {\n newSpec.meta.transformX = transformX;\n newSpec.meta.transformY = transformY;\n } else {\n newSpec.meta = { transformX, transformY };\n }\n\n return newSpec;\n });\n}\n","/**\n * Entry point of Datamations JavaScript code\n * Reads vega-lite specifications, converts to vega specs and animates them\n *\n * ### Dependencies:\n * - gemini: https://github.com/uwdata/gemini\n * - vega-lite: https://vega.github.io/vega-lite/\n * - vega: https://vega.github.io/vega/\n * - vega-embed: https://github.com/vega/vega-embed\n * - d3: https://d3js.org/\n * - gifshot: https://github.com/yahoo/gifshot\n * - html2canvas: https://html2canvas.hertzen.com/\n * - download2: http://danml.com/download.html\n */\n\nimport { CONF, META_PARSE_VALUES } from \"./config\";\nimport { getSelectors, splitLayers, getRows } from \"./utils\";\nimport { hackFacet, getEmptySpec } from \"./hack-facet-view\";\nimport { getGridSpec, getJitterSpec } from \"./layout\";\nimport { CustomAnimations } from \"./custom-animations\";\n\n/**\n *\n * @param {String} id conteiner id\n * @param {Object} param1 configuration object\n * @param {Array} param1.specs list of vega-lite specifications\n * @param {Boolean} param1.autoPlay autoPlay\n * @param {Number} param1.frameDel frame duration (in ms.)\n * @param {Number} param1.frameDel delay between frames (in ms.)\n * @returns an object of exposed functions\n */\nexport default function App(id, { specs, autoPlay = false, frameDur, frameDel }) {\n let rawSpecsImmutable; // saving passed specs here, not changed by reference\n let rawSpecs; // holds raw vega-lite specs, not transformed\n let vegaLiteSpecs;\n let vegaSpecs; // vega specs\n let frames;\n let metas;\n let frameIndex = 0;\n let timeoutId;\n let playing = false;\n let initializing = false;\n let frameDuration = frameDur || 2000;\n let frameDelay = frameDel || 1000;\n\n // a fallback gemini spec in case gemini.animate could not recommend anything\n const gemSpec = {\n timeline: {\n concat: [\n {\n sync: [\n {\n component: {\n mark: \"marks\",\n },\n change: {\n data: {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: false,\n },\n encode: {\n update: true,\n enter: true,\n exit: true,\n },\n },\n timing: {\n duration: {\n ratio: 1,\n },\n },\n },\n ],\n },\n ],\n },\n totalDuration: frameDuration,\n };\n\n /**\n * Resets all the instance variables to be able to re-run animation\n */\n const reset = () => {\n vegaLiteSpecs = [];\n vegaSpecs = [];\n rawSpecs = [];\n rawSpecsImmutable = [];\n frames = [];\n metas = [];\n frameIndex = 0;\n playing = false;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n /**\n * Initializes datamation app\n */\n async function init() {\n // ignore all subsequent init calls.\n if (initializing) return;\n initializing = true;\n\n const { slider } = getSelectors(id);\n\n reset();\n\n // load or set data\n if (specs) {\n vegaLiteSpecs = JSON.parse(JSON.stringify(specs));\n }\n\n // save raw specs to use for facet axes drawing\n vegaLiteSpecs.forEach((d) => {\n rawSpecs.push(JSON.parse(JSON.stringify(d)));\n rawSpecsImmutable.push(JSON.parse(JSON.stringify(d)));\n\n if (d.meta) {\n metas.push(d.meta);\n }\n });\n\n d3.select(slider).property(\"max\", vegaLiteSpecs.length - 1);\n\n // parse, jitter, layer splitting\n await transformSpecs();\n\n // compile to vega\n toVegaSpecs();\n\n // create frames for animation\n await makeFrames();\n\n drawSpec(0);\n\n if (autoPlay) {\n setTimeout(play, 100);\n }\n\n initializing = false;\n }\n\n /**\n * Plays animation\n */\n function play(cb = () => {}) {\n playing = true;\n frameIndex = 0;\n\n const tick = () => {\n animateFrame(frameIndex, cb).then(() => {\n if (playing) {\n frameIndex++; // next frame\n\n if (frames[frameIndex]) {\n tick();\n } else {\n playing = false;\n disableEnable(\"enable\");\n }\n }\n });\n\n if (typeof HTMLWidgets !== \"undefined\" && HTMLWidgets.shinyMode) {\n var prevIndex = frameIndex - 1;\n Shiny.onInputChange(\"slider_state\", prevIndex);\n }\n };\n\n disableEnable(\"disable\");\n tick();\n }\n\n /**\n * Draws vega lite spec statically (without transition), also updates slider, description, show/hides some layers\n * @param {Number} index specification index in vegaLiteSpecs\n * @param {Object} vegaSpec source vega spec of current frame\n * @returns a promise of vegaEmbed\n */\n function drawSpec(index, vegaSpec) {\n let spec = vegaLiteSpecs[index];\n\n if (!spec) return;\n\n if (spec.custom) {\n spec = gemini.vl2vg4gemini(spec.sequence[spec.sequence.length - 1]);\n }\n\n const meta = metas[index];\n\n const {\n axisSelector,\n visSelector,\n descr,\n slider,\n otherLayers,\n controls,\n exportWrap,\n } = getSelectors(id);\n\n d3.select(slider).property(\"value\", index);\n d3.select(descr).html(meta.description || \"frame \" + index);\n d3.select(axisSelector)\n .style(\"opacity\", meta.axes ? 1 : 0)\n .html(\"\");\n d3.select(visSelector).classed(\"with-axes\", meta.axes);\n d3.select(otherLayers).classed(\"with-axes\", meta.axes);\n\n // draw axis\n if (meta.axes) {\n drawAxis(index);\n }\n\n const transformX = meta.transformX || 0;\n const transformY = meta.transformY || 0;\n\n // shift vis\n d3.select(visSelector)\n .style(\"left\", transformX + \"px\")\n .style(\"top\", transformY + \"px\");\n\n const _width = spec.width + transformX + 10;\n d3.select(controls).style(\"width\", _width + \"px\");\n d3.select(descr).style(\"width\", _width + \"px\");\n\n // draw vis\n return drawChart(spec, vegaSpec && vegaSpec.custom ? null : vegaSpec);\n }\n\n /**\n * Draws a chart, either spec or vegaSpec (which is passed from animate function)\n * Supports single view as well as multiple view chart\n * @param {Object} spec vega-lite spec\n * @param {Object} vegaSpec source vega spec of current frame\n * @returns a promise of vegaEmbed\n */\n function drawChart(spec, vegaSpec) {\n const { visSelector, otherLayers } = getSelectors(id);\n const layers = document.querySelector(otherLayers);\n layers.innerHTML = \"\";\n\n if (Array.isArray(spec)) {\n return new Promise((res) => {\n spec.forEach((s, i) => {\n let target,\n embedSpec = s;\n\n if (s.meta.animated) {\n target = visSelector;\n if (vegaSpec) {\n embedSpec = vegaSpec;\n }\n } else {\n const div = document.createElement(\"div\");\n div.classList.add(\"vega-hidden-layer\");\n layers.appendChild(div);\n target = div;\n }\n\n vegaEmbed(target, embedSpec, { renderer: \"svg\" }).then(() => {\n if (i === spec.length - 1) {\n res();\n }\n\n // ensure facet translations match in axisSelector and otherLayers\n setTimeout(() => {\n adjustAxisAndErrorbars();\n }, 100);\n });\n });\n });\n } else {\n return vegaEmbed(visSelector, vegaSpec || spec, { renderer: \"svg\" });\n }\n }\n\n /**\n * Fixes hacked axis spec and error bar alignment\n */\n function adjustAxisAndErrorbars() {\n const { axisSelector, otherLayers } = getSelectors(id);\n const axisCells = d3\n .select(axisSelector)\n .selectAll(\".mark-group.cell>g\")\n .nodes();\n const otherLayersCells = d3\n .select(otherLayers)\n .selectAll(\".mark-group.cell>g\")\n .nodes();\n\n if (axisCells.length === otherLayersCells.length) {\n for (let i = 0; i < axisCells.length; i++) {\n const transform = axisCells[i].getAttribute(\"transform\");\n otherLayersCells[i].setAttribute(\"transform\", transform);\n }\n }\n }\n\n /**\n * Draws an axis layer. This is called when meta.axes = true.\n * @param {Number} index specification index in vegaLiteSpecs\n * @returns a promise of vegaEmbed\n */\n function drawAxis(index) {\n let spec = rawSpecs[index];\n\n if (spec.spec && spec.spec.layer) {\n const split = splitLayers(spec);\n spec = split[1];\n }\n\n const columnFacet = spec.facet && spec.facet.column;\n const { axisSelector, controls, descr, otherLayers } = getSelectors(id);\n\n // update axis domain to matched hacked facet view\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n\n if (!encoding.y.scale) {\n const extentY = d3.extent(spec.data.values, (d) => d[CONF.Y_FIELD]);\n encoding.y.scale = { domain: extentY };\n }\n\n if (encoding.color) {\n encoding.color.legend = null;\n }\n\n if (encoding.fill) {\n encoding.fill.legend = null;\n }\n\n if (encoding.x && encoding.x.axis) {\n encoding.x.axis.labelAngle = -90;\n encoding.x.axis.titleOpacity = 0;\n }\n\n return vegaEmbed(axisSelector, spec, { renderer: \"svg\" }).then(() => {\n if (columnFacet && columnFacet.title) {\n const fn = function () {\n const transform = d3.select(this).attr(\"transform\");\n const x = transform.split(\"(\")[1].split(\",\")[0];\n return `translate(${x}, 40)`;\n };\n\n d3.select(axisSelector + \" svg > g\").attr(\"transform\", fn);\n d3.select(otherLayers + \" svg > g\").attr(\"transform\", fn);\n }\n const width = d3\n .select(axisSelector)\n .node()\n .getBoundingClientRect().width;\n d3.select(controls).style(\"width\", width + \"px\");\n d3.select(descr).style(\"width\", width + \"px\");\n });\n }\n\n /**\n * Animates a frame, from source to target vega specification using gemini\n * @param {Number} index specification index in vegaLiteSpecs\n * @param {Function} cb callback function of each frame drawal\n * @returns a promise of gemini.animate\n */\n async function animateFrame(index, cb) {\n if (!frames[index]) return;\n\n console.log(\"animating frame\", index);\n\n const { axisSelector, visSelector, otherLayers, descr, slider, controls } =\n getSelectors(id);\n\n let { source, target, gemSpec, prevMeta, currMeta } = frames[index];\n let anim = null;\n\n if (source.custom) {\n const _source_spec = gemini.vl2vg4gemini(\n source.sequence[source.sequence.length - 1]\n );\n anim = await gemini.animate(_source_spec, target, gemSpec);\n } else if (target.custom) {\n anim = await gemini.animateSequence(target.sequence, gemSpec);\n } else {\n anim = await gemini.animate(source, target, gemSpec);\n }\n\n let currHasAxes = currMeta.axes;\n let width = target.width;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n // initial frame\n if (index === 0 && cb) cb(0);\n\n return new Promise((res) => {\n drawSpec(index, source).then(() => {\n timeoutId = setTimeout(() => {\n d3.select(descr).html(currMeta.description);\n anim.play(visSelector).then(() => {\n d3.select(slider).property(\"value\", index + 1);\n cb && cb(index + 1);\n res();\n });\n\n const transformX = currMeta.transformX || 0;\n const transformY = currMeta.transformY || 0;\n\n d3.select(visSelector)\n .transition()\n .duration(750)\n .style(\"left\", transformX + \"px\")\n .style(\"top\", transformY + \"px\");\n\n // show/hide axis vega chart\n if (currHasAxes) {\n drawAxis(index + 1);\n d3.select(axisSelector)\n .transition()\n .duration(1000)\n .style(\"opacity\", 1);\n d3.select(visSelector).classed(\"with-axes\", true);\n d3.select(otherLayers).classed(\"with-axes\", true);\n } else {\n d3.select(axisSelector)\n .transition()\n .duration(1000)\n .style(\"opacity\", 0);\n d3.select(visSelector).classed(\"with-axes\", false);\n d3.select(otherLayers).classed(\"with-axes\", false);\n d3.select(controls).style(\"width\", width + transformX + 10 + \"px\");\n d3.select(descr).style(\"width\", width + transformX + 10 + \"px\");\n }\n\n const nextSpec = vegaLiteSpecs[index + 1];\n\n if (nextSpec && Array.isArray(nextSpec)) {\n const statics = nextSpec.filter((d) => !d.meta.animated);\n\n d3.select(otherLayers)\n .html(\"\")\n .style(\"opacity\", 0)\n .transition()\n // .delay(frameDuration / 3)\n .duration(frameDuration / 2)\n .style(\"opacity\", 1);\n\n statics.forEach((s) => {\n const div = document.createElement(\"div\");\n div.classList.add(\"vega-hidden-layer\");\n vegaEmbed(div, s, { renderer: \"svg\" }).then(() => {\n adjustAxisAndErrorbars();\n });\n document.querySelector(otherLayers).appendChild(div);\n });\n } \n }, \n // removed delay between frames for custom animations\n target.custom ? 0 : frameDelay);\n });\n });\n }\n\n /**\n * Transforms specifications into proper format:\n * - meta.grid = generates infogrid\n * - meta.jitter = jitters data using d3.forceCollide\n * - meta.custom_animation = handles custom animation type\n * - spec.layer = splits layers to stack on top on each other\n */\n async function transformSpecs() {\n const rows = getRows(vegaLiteSpecs);\n\n for (let i = 0; i < vegaLiteSpecs.length; i++) {\n let vlSpec = vegaLiteSpecs[i];\n\n if (Array.isArray(vlSpec)) continue; // just sanity check, making sure that it is not an array\n\n // if filter has empty `oneOf`, then generate empty spec and avoid any further processing\n if (\n vlSpec.transform &&\n vlSpec.transform[0].filter &&\n vlSpec.transform[0].filter.oneOf &&\n vlSpec.transform[0].filter.oneOf.length === 0\n ) {\n const emptySpec = getEmptySpec(vlSpec);\n\n metas[i] = emptySpec.meta;\n rawSpecs[i] = emptySpec;\n vlSpec = emptySpec;\n vegaLiteSpecs[i] = emptySpec;\n continue;\n }\n\n const meta = vlSpec.meta;\n const parse = meta.parse;\n\n // parsing\n\n if (meta.custom_animation) {\n let funName = meta.custom_animation;\n let p = null;\n\n // handle quantile\n if (\n Array.isArray(meta.custom_animation) &&\n meta.custom_animation[0] === \"quantile\"\n ) {\n p = meta.custom_animation[1];\n funName = \"median\";\n }\n\n let source = {\n ...rawSpecs[i - 1],\n data: rawSpecsImmutable[i - 1].data,\n };\n let target = vlSpec;\n\n if (rawSpecsImmutable[i - 1].facet) {\n source = {\n ...vegaLiteSpecs[i - 1],\n meta: {\n ...vegaLiteSpecs[i - 1].meta,\n hasFacet: true,\n columnFacet: rawSpecsImmutable[i - 1].facet.column,\n rowFacet: rawSpecsImmutable[i - 1].facet.row,\n },\n data: {\n values: vegaLiteSpecs[i - 1].data.values.map((d) => {\n return {\n ...d,\n [CONF.X_FIELD]: d[CONF.X_FIELD + \"_num\"],\n };\n }),\n },\n };\n }\n\n // if custom animations have facets, fake them before passing to CustomAnimation\n if (vegaLiteSpecs[i].facet) {\n const newSpecTarget = await hackFacet(vegaLiteSpecs[i]);\n vegaLiteSpecs[i] = newSpecTarget;\n target = newSpecTarget;\n }\n\n const fn = CustomAnimations[funName];\n\n if (fn) {\n const sequence = await fn(source, target, vegaLiteSpecs[i - 1], p);\n vegaLiteSpecs[i] = {\n custom: meta.custom_animation,\n sequence,\n };\n }\n } else if (parse === META_PARSE_VALUES.grid) {\n const gridSpec = await getGridSpec(vlSpec, rows);\n\n const enc = gridSpec.spec ? gridSpec.spec.encoding : gridSpec.encoding;\n rawSpecs[i].data.values = gridSpec.data.values;\n\n // update domain for raw spec axis layer\n if (rawSpecs[i].meta.axes && rawSpecs[i].meta.splitField) {\n const encoding = rawSpecs[i].spec\n ? rawSpecs[i].spec.encoding\n : rawSpecs[i].encoding;\n\n encoding.x.axis = enc.x.axis;\n encoding.y.scale = {\n domain: enc.y.scale.domain,\n };\n encoding.x.scale = {\n domain: enc.x.scale.domain,\n };\n }\n\n vegaLiteSpecs[i] = gridSpec;\n } \n else if (parse === META_PARSE_VALUES.jitter) {\n vegaLiteSpecs[i] = await getJitterSpec(vlSpec);\n } \n // since gemini does not support multiple multiple axis transitions, \n // we must split the layers and draw as separate vega spec\n else if (vlSpec.layer || (vlSpec.spec && vlSpec.spec.layer)) {\n const arr = splitLayers(vlSpec);\n\n vegaLiteSpecs[i] = [];\n\n for (let j = 0; j < arr.length; j++) {\n const s = arr[j];\n\n // fake facets\n if (s.facet && s.spec && s.meta.animated) {\n const newSpec = await hackFacet(s);\n vegaLiteSpecs[i].push(newSpec);\n metas[i] = newSpec.meta;\n } else {\n vegaLiteSpecs[i].push(s);\n }\n }\n }\n\n if (vegaLiteSpecs[i]) {\n const facet = vegaLiteSpecs[i].facet;\n const spec = vegaLiteSpecs[i].spec;\n\n // fake facets\n if (facet && spec) {\n const newSpec = await hackFacet(vegaLiteSpecs[i]);\n vegaLiteSpecs[i] = newSpec;\n }\n }\n }\n\n console.log(\"parsed specs:\", vegaLiteSpecs);\n }\n\n /**\n * Converts vega-lite specs to vega specs using vl2vg4gemini (https://github.com/uwdata/gemini#vl2vg4gemini)\n */\n function toVegaSpecs() {\n vegaSpecs = vegaLiteSpecs.map((d) => {\n if (d.custom) {\n return d;\n }\n\n const s = Array.isArray(d) ? d.find((d) => d.meta.animated) : d;\n return gemini.vl2vg4gemini(s);\n });\n }\n\n /**\n * Generates animation frames\n * @returns array of objects of \\{ source, target, gemSpec, prevMeta, currMeta \\}\n */\n async function makeFrames() {\n const options = {\n stageN: 1,\n\n scales: {\n x: {\n domainDimension: \"diff\",\n },\n y: {\n domainDimension: \"diff\",\n },\n },\n\n marks: {\n marks: {\n change: {\n scale: [\"x\", \"y\"],\n data: {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: true,\n },\n encode: {\n update: true,\n enter: true,\n exit: true,\n },\n },\n },\n },\n totalDuration: frameDuration,\n };\n\n for (let i = 1; i < vegaSpecs.length; i++) {\n const prev = vegaSpecs[i - 1];\n const curr = vegaSpecs[i];\n\n const prevMeta = metas[i - 1];\n const currMeta = metas[i];\n\n try {\n let resp = null;\n\n if (curr.custom) {\n resp = await gemini.recommendForSeq(curr.sequence, {\n ...options,\n stageN: curr.sequence.length - 1,\n totalDuration: frameDuration * 2,\n });\n\n const _gemSpec = resp[0].specs.map((d) => d.spec);\n\n // make sure to add gemini_id to data change.\n // gemini recommend does not add it by itself.\n _gemSpec.forEach((d) => {\n if (d.timeline.concat.length) {\n const first = d.timeline.concat[0].sync[0];\n if (first && first.change && first.change.data) {\n first.change.data = {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: true,\n };\n }\n }\n });\n\n frames.push({\n source: prev,\n target: curr,\n gemSpec: _gemSpec,\n prevMeta,\n currMeta,\n });\n } else {\n resp = await gemini.recommend(\n prev.custom\n ? gemini.vl2vg4gemini(prev.sequence[prev.sequence.length - 1])\n : prev,\n curr,\n options\n );\n\n const _gemSpec = resp[0] ? resp[0].spec : gemSpec;\n const sync = _gemSpec.timeline.concat[0].sync;\n\n if (!sync.some((d) => d.component === \"view\")) {\n sync.push({\n component: \"view\",\n change: {\n signal: [\"width\", \"height\"],\n },\n timing: {\n duration: {\n ratio: 1,\n },\n },\n });\n }\n\n frames.push({\n source: prev,\n target: curr,\n gemSpec: _gemSpec,\n prevMeta,\n currMeta,\n });\n }\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n /**\n * Slider on change callback\n */\n function onSlide() {\n playing = false;\n disableEnable(\"enable\");\n const { slider } = getSelectors(id);\n const index = document.querySelector(slider).value;\n drawSpec(index);\n }\n\n /**\n * Exports png files for each frame\n */\n function exportPNG() {\n const { exportWrap } = getSelectors(id);\n\n const pngs = [];\n\n const callback = (index) => {\n const done = index >= frames.length;\n\n html2canvas(document.querySelector(exportWrap)).then((canvas) => {\n pngs.push(canvas.toDataURL());\n\n if (done) {\n pngs.forEach((uri, i) => {\n var a = document.createElement(\"a\");\n a.href = uri;\n a.download = `frame-${i + 1}.png`;\n a.click();\n });\n }\n });\n };\n\n play(callback);\n }\n\n /**\n * Exports datamation as gif.\n * @param {Boolean} fromWeb truthy if it is called from webpage, falsy from command line tool\n * @returns either base64 string, or downloads .gif file\n */\n function exportGif(fromWeb) {\n const { exportWrap, exportBtn } = getSelectors(id);\n\n if (fromWeb) {\n loaderOnOff(true);\n disableEnable(\"disable\", { slider: true });\n }\n\n let intervalId,\n images = [];\n\n const startInterval = () => {\n if (intervalId) clearInterval(intervalId);\n\n intervalId = setInterval(() => {\n html2canvas(document.querySelector(exportWrap)).then((canvas) => {\n images.push(canvas.toDataURL());\n });\n }, 16.66666);\n };\n\n let maxWidth = 300;\n let maxHeight = 300;\n\n return new Promise((res) => {\n const callback = (index) => {\n const done = index >= frames.length;\n const bound = document\n .querySelector(exportWrap)\n .getBoundingClientRect();\n\n if (bound.width > maxWidth) maxWidth = bound.width;\n if (bound.height > maxHeight) maxHeight = bound.height;\n\n if (done) {\n intervalId && clearInterval(intervalId);\n\n setTimeout(() => {\n gifshot.createGIF(\n {\n images,\n gifWidth: maxWidth,\n gifHeight: maxHeight,\n frameDuration: 2.5,\n },\n function (obj) {\n if (fromWeb) {\n loaderOnOff(false);\n disableEnable(\"enable\", { slider: true });\n }\n\n if (!obj.error) {\n var image = obj.image;\n\n if (fromWeb) {\n download(image, \"animation.gif\", \"image/gif\");\n }\n res(image);\n } else {\n console.error(\"error creating gif\", obj.errorMsg);\n }\n }\n );\n }, 1000);\n } else {\n intervalId && clearInterval(intervalId);\n setTimeout(startInterval, frameDelay);\n }\n };\n\n play(callback);\n });\n }\n\n /**\n * Disables or enables some components\n * @param {String} cmd \"disable\" or \"enable\"\n * @param {Array} components array of components\n */\n function disableEnable(cmd, components) {\n const { replayBtn, exportBtn, slider } = getSelectors(id);\n const arr = [replayBtn, exportBtn];\n\n if (components && components.slider) {\n arr.push(slider);\n }\n\n arr.forEach((sel) => {\n const el = document.querySelector(sel);\n\n if (cmd == \"disable\") {\n el.setAttribute(\"disabled\", \"disabled\");\n } else {\n el.removeAttribute(\"disabled\");\n }\n });\n }\n\n /**\n * Download button icon adjustment\n * @param {Boolean} loading\n */\n function loaderOnOff(loading) {\n const { exportBtn } = getSelectors(id);\n let className = \"fas fa-download\";\n\n if (loading) {\n className = \"fas fa-spinner spin\";\n }\n\n d3.select(exportBtn).select(\"i\").attr(\"class\", className);\n }\n\n init();\n\n return {\n onSlide,\n play,\n exportPNG,\n exportGif,\n animateFrame,\n getFrames: () => frames,\n };\n}\n"],"names":["runtime","exports","undefined","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","key","value","defineProperty","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","state","GenStateSuspendedStart","method","arg","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","done","GenStateSuspendedYield","makeInvokeMethod","fn","call","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","PromiseImpl","invoke","resolve","reject","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","globalThis","Function","CONF","X_FIELD","Y_FIELD","ORDER_FIELD","SCHEME","IGNORE_FIELDS","META_PARSE_VALUES","grid","jitter","getSelectors","id","base","axisSelector","visSelector","descr","slider","otherLayers","controls","exportWrap","exportBtn","replayBtn","splitLayers","input","specArray","spec","layer","d","JSON","parse","stringify","animated","meta","encoding","lookupByBucket","words","buckets","findIndex","getRows","vegaLiteSpecs","maxRows","filter","_ref","specWidth","width","specHeight","height","splitField","groupKeys","facet","column","field","row","specValues","data","secondarySplit","indexOf","_d","secondaryField","concat","grouped","d3","rollups","apply","arr","_o","sum","x","n","o","_defineProperty","map","flatMap","maxN","max","rows","Math","ceil","sqrt","floor","generateGrid","stacked","sort","metas","maxCols","splitOptions","Array","from","Set","counter","_d2","reduce","v","j","columns","xCenter","startCol","datum","k","_objectSpread2","y","colorFieldObj","_typeof","a","b","gemini_id","gemini_ids","gridValues","num_groups","domain","getGridSpec","res","_generateGrid","xDomain","min","yPadding","yDomain","middle","scale","labels","expr","extent","rules","m","groupKey","groupValue","axis","labelExpr","labelAngle","title","getJitterSpec","nodes","innerGroupCount","size","facetSize","yExtent","xScale","scaleBand","range","paddingOuter","oldX","oldY","bandwidth","scaledX","round","_objectSpread","simulation","forceSimulation","force","forceX","forceY","strength","forceCollide","radius","tick","axes","xAxisLabels","axisExpr","mapped","label","getCountStep","_count","source","target","shrink","sourceMeta","transform","x2","aggregate","$schema","getMedianStep","step","p","all_groups","_ref2","isLast","hasFacet","sorted","rank","y_median","quantile","y_median_pos","scaleY","median_rank","max_rank","diff","dx","_objectSpread3","rank_delta_abs","abs","y_delta","bisection","newField","groupFilter","groupId","columnFacet","rowFacet","median","median_pos","rankDiff","rule_start","rule_end","_toConsumableArray","rollup","ruleField","top_rule","bottom_rule","color","getMeanStep","_ref3","y_mean","mean","y_mean_pos","mean_rank","dividor","multiplier","_objectSpread4","rankRatio_from_mean","rankRatio_from_mean_start","rankRatio_from_mean_end","mean_pos","rule","getMinMaxStep","_d3","minOrMax","_ref4","aggrFn","aggr","aggr_pos","g","find","isAggr","group","CustomAnimations","count","_asyncToGenerator","_callee","rawSource","stacks","pullUp","_context","_x","_x2","arguments","step_1","step_2","barWidth","orient","step_3","y2","step_4","calculatedSource","percent","getEmptySpec","description","$scheme","filled","strokeWidth","ticks","getSpecTemplate","labelPadding","additionals","getHackedSpec","view","row_header","column_header","_ref2$width","_ref2$height","rowId","colId","newSpec","colMap","Map","rowMap","scaleX","yAxisValues","yAxisExpr","bounds","y1","set","yCoord","xAxisValues","xAxisExpr","x1","xCoord","col","xStart","get","yStart","xField","yField","val","hackFacet","div","document","createElement","vegaEmbed","renderer","resp","config","_resp$view$_origin","_slicedToArray","_origin","transformX","transformY","specs","rawSpecsImmutable","rawSpecs","vegaSpecs","frames","timeoutId","_ref$autoPlay","autoPlay","frameDur","frameDel","frameIndex","playing","initializing","frameDuration","frameDelay","gemSpec","timeline","sync","component","change","update","enter","exit","encode","timing","duration","ratio","totalDuration","clearTimeout","_init","_getSelectors10","select","property","transformSpecs","toVegaSpecs","makeFrames","drawSpec","setTimeout","play","cb","animateFrame","disableEnable","HTMLWidgets","shinyMode","prevIndex","Shiny","onInputChange","index","vegaSpec","custom","gemini","vl2vg4gemini","sequence","html","style","classed","drawAxis","_width","layers","querySelector","innerHTML","isArray","s","embedSpec","classList","add","appendChild","adjustAxisAndErrorbars","drawChart","axisCells","selectAll","otherLayersCells","getAttribute","setAttribute","_getSelectors4","extentY","legend","fill","titleOpacity","attr","split","node","getBoundingClientRect","_animateFrame","_callee2","_getSelectors11","_frames$index","currMeta","anim","_source_spec","currHasAxes","_context2","console","log","animate","animateSequence","transition","nextSpec","statics","_transformSpecs","_callee3","vlSpec","emptySpec","funName","newSpecTarget","gridSpec","enc","_newSpec","_context3","oneOf","custom_animation","_makeFrames","_callee4","options","curr","prevMeta","_gemSpec","_gemSpec2","_context4","stageN","scales","domainDimension","marks","recommendForSeq","first","recommend","some","signal","t0","cmd","components","sel","el","removeAttribute","loaderOnOff","loading","className","init","onSlide","exportPNG","pngs","html2canvas","canvas","toDataURL","uri","href","download","click","exportGif","fromWeb","intervalId","images","startInterval","clearInterval","setInterval","maxWidth","maxHeight","bound","gifshot","createGIF","gifWidth","gifHeight","errorMsg","image","getFrames"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"datamations.min.js","sources":["../node_modules/regenerator-runtime/runtime.js","../scripts/config.js","../scripts/utils.js","../scripts/layout.js","../scripts/custom-animations.js","../scripts/hack-facet-view.js","../scripts/app.js"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","export const CONF = {\n X_FIELD: \"datamations_x\",\n Y_FIELD: \"datamations_y\",\n ORDER_FIELD: \"datamations_order\",\n SCHEME: \"https://vega.github.io/schema/vega-lite/v4.json\",\n};\n\nexport const IGNORE_FIELDS = [\n 'tooltip', 'x', 'y',\n 'datamations_x', 'datamations_y'\n];\n\nexport const META_PARSE_VALUES = {\n grid: \"grid\",\n jitter: \"jitter\",\n};","import { IGNORE_FIELDS } from \"./config.js\";\n\n/**\n * Gets selectors for each componenent, such as slider and animation divs\n * @param {String} id root container id where all the animation components are rendered\n * @returns object of selectors\n */\nexport function getSelectors(id) {\n const base = \"#\" + id;\n\n return {\n axisSelector: base + \" .vega-for-axis\",\n visSelector: base + \" .vega-vis\",\n descr: base + \" .description\",\n slider: base + \" .slider\",\n otherLayers: base + \" .vega-other-layers\",\n controls: base + \" .controls-wrapper\",\n exportWrap: base + \" .export-wrapper\",\n exportBtn: base + \" .export-btn\",\n replayBtn: base + \" .replay-btn\",\n };\n}\n\n/**\n * Splits layers into separate vega-lite specifications, removes layer field\n * @param {Object} input vega-lite specification with layers\n * @returns a list of specs\n */\nexport function splitLayers(input) {\n const specArray = [];\n const spec = input.spec;\n\n if (spec && spec.layer) {\n spec.layer.forEach((d, i) => {\n const obj = JSON.parse(JSON.stringify(input));\n const animated = i === spec.layer.length - 1;\n\n if (obj.meta) {\n obj.meta.animated = animated;\n } else {\n obj.meta = { animated };\n }\n\n obj.spec.encoding = d.encoding;\n obj.spec.mark = d.mark;\n delete obj.spec.layer;\n specArray.push(obj);\n });\n } else if (input.layer) {\n input.layer.forEach((d, i) => {\n const obj = JSON.parse(JSON.stringify(input));\n const animated = i === input.layer.length - 1;\n\n if (obj.meta) {\n obj.meta.animated = animated;\n } else {\n obj.meta = { animated };\n }\n\n obj.encoding = d.encoding;\n obj.mark = d.mark;\n delete obj.layer;\n specArray.push(obj);\n });\n }\n\n return specArray;\n}\n\n/**\n * Looks up a word based of buckets and value.\n * Example:\n * - words: ['a', 'b', 'c']\n * - buckets: [10, 20, 30]\n * - value: 25\n * will return 'c'\n * @param {Array} words list of words\n * @param {Array} buckets list of numbers\n * @param {Number} value score to lookup\n */\nexport function lookupByBucket(words, buckets, value) {\n return words[buckets.findIndex((d) => value <= d)];\n}\n\n/**\n * Finds correct number of rows for grid based on biggest group\n * @param {Array} vegaLiteSpecs an array of vega lite specs\n * @returns a number of rows\n */\nexport function getRows(vegaLiteSpecs) {\n let maxRows = 0;\n\n vegaLiteSpecs\n .filter((d) => d.meta.parse === \"grid\")\n .forEach((spec) => {\n let { width: specWidth, height: specHeight } = spec.spec || spec;\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const splitField = spec.meta.splitField;\n const groupKeys = [];\n\n if (spec.facet) {\n if (spec.facet.column) {\n groupKeys.push(spec.facet.column.field);\n }\n if (spec.facet.row) {\n groupKeys.push(spec.facet.row.field);\n }\n }\n\n let specValues = spec.data.values;\n\n const gap = 2;\n const distance = 4 + gap;\n\n let secondarySplit = Object.keys(encoding).filter((d) => {\n const field = encoding[d].field;\n return (\n field !== splitField &&\n IGNORE_FIELDS.indexOf(d) === -1 &&\n groupKeys.indexOf(field) === -1\n );\n })[0];\n\n // combine groups if secondarySplit\n if (splitField && secondarySplit) {\n const secondaryField = encoding[secondarySplit].field;\n const keys = [...groupKeys, splitField];\n\n const grouped = d3.rollups(\n specValues,\n (arr) => {\n const obj = {};\n let sum = 0;\n\n arr.forEach((x) => {\n sum += x.n;\n obj[x[secondaryField]] = sum;\n });\n\n const o = {\n [splitField]: arr[0][splitField],\n [secondaryField]: obj,\n n: sum,\n };\n\n groupKeys.forEach((x) => {\n o[x] = arr[0][x];\n });\n\n return o;\n },\n ...keys.map((key) => {\n return (d) => d[key];\n })\n );\n\n specValues = grouped.flatMap((d) => {\n if (keys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n\n specWidth = specWidth / grouped.length;\n }\n\n const maxN = d3.max(specValues, (d) => d.n);\n\n let rows = Math.ceil(Math.sqrt(maxN));\n let maxCols = Math.ceil(maxN / rows);\n\n // if horizontal gap is less than 5,\n // then take up all vertical space to increase rows and reduce columns\n if (specWidth / maxCols < 5) {\n rows = Math.floor(specHeight / distance);\n }\n\n if (rows > maxRows) {\n maxRows = rows;\n }\n });\n\n return maxRows;\n}\n","/*\n* Layout generation functions for datamations.\n* Supports:\n* - grid view: meta.parse = \"grid\"\n* - jittered view: meta.parse = \"jitter\"\n*/\nimport { CONF, IGNORE_FIELDS } from \"./config.js\";\nimport { lookupByBucket } from \"./utils.js\";\n\n/**\n * Generates data for grid specs\n * @param {Object} spec vega-lite spec\n * @param {Number} rows number of rows\n * @param {Boolean} stacked if true, circles are stacked and vertically aliged\n * @returns an array of objects\n */\nexport function generateGrid(spec, rows = 10, stacked = false) {\n const splitField = spec.meta.splitField;\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const groupKeys = [];\n\n let {width: specWidth} = spec.spec || spec;\n\n if (spec.facet) {\n if (spec.facet.column) {\n groupKeys.push(spec.facet.column.field);\n spec.facet.column.sort = { \"field\": CONF.ORDER_FIELD };\n }\n if (spec.facet.row) {\n groupKeys.push(spec.facet.row.field);\n spec.facet.row.sort = { \"field\": CONF.ORDER_FIELD };\n }\n }\n\n let specValues = spec.data.values;\n\n const metas = [];\n\n specValues.forEach((d, i) => {\n d[CONF.ORDER_FIELD] = i;\n if (d.meta) {\n metas.push(...Object.keys(d.meta));\n }\n });\n\n let secondarySplit = Object.keys(encoding).filter(d => {\n const field = encoding[d].field;\n return field !== splitField &&\n IGNORE_FIELDS.indexOf(d) === -1 &&\n groupKeys.indexOf(field) === -1 &&\n metas.indexOf(field) === -1;\n })[0];\n\n let secondaryField = null;\n\n // combine groups\n // for example, if splitField = player, but color = hit:\n\n // { \"n\": 5, \"player\": \"a\", \"hit\": \"yes\" },\n // { \"n\": 10, \"player\": \"a\", \"hit\": \"no\" },\n // { \"n\": 15, \"player\": \"b\", \"hit\": \"yes\" },\n // { \"n\": 35, \"player\": \"b\", \"hit\": \"no\" }\n\n // after this code block we will get:\n // { \"n\": 15, \"player\": \"a\", \"hit\": { \"yes\": 5, \"no\": 10 } },\n // { \"n\": 50, \"player\": \"b\", \"hit\": { \"yes\": 15, \"no\": 35 } },\n\n if (splitField && secondarySplit) {\n secondaryField = encoding[secondarySplit].field;\n const keys = [...groupKeys, splitField];\n\n const grouped = d3.rollups(\n specValues,\n arr => {\n const obj = {};\n let sum = 0;\n\n arr.forEach(x => {\n sum += x.n;\n obj[x[secondaryField]] = sum;\n });\n\n const o = {\n [splitField]: arr[0][splitField],\n [secondaryField]: obj,\n n: sum,\n };\n\n groupKeys.forEach(x => {\n o[x] = arr[0][x];\n });\n\n return o;\n },\n ...keys.map((key) => {\n return (d) => d[key];\n })\n );\n\n specValues = grouped.flatMap((d) => {\n if (keys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n\n specWidth = specWidth / grouped.length;\n }\n\n let maxCols = Math.ceil(d3.max(specValues, d => d.n) / rows);\n let splitOptions = [];\n\n if (splitField) {\n splitOptions = Array.from(\n new Set(specValues.map((d) => d[splitField]))\n )\n }\n\n let counter = 1;\n\n const reduce = (v) => {\n const arr = [];\n\n v.forEach((d, j) => {\n const n = d.n;\n const columns = Math.ceil(n / rows);\n const xCenter = splitField ? splitOptions.indexOf(d[splitField]) + 1 : 1;\n\n let startCol = (xCenter - 1) * maxCols + j; // inner grid start\n startCol += Math.floor((maxCols - columns) / 2); // center alignment\n\n const datum = {};\n\n // remove n and gemini_ids, we won't need them any more\n Object.keys(d).forEach(k => {\n if (k !== 'n' && k !== 'gemini_ids') {\n datum[k] = d[k];\n }\n });\n\n for (let i = 0; i < n; i++) {\n const x = startCol + Math.floor(i / rows);\n const y = rows - 1 - i % rows;\n const colorFieldObj = {};\n\n // for secondary split, e.g. is_hit, find correct key and value\n if (secondaryField && typeof[d[secondaryField]] === \"object\") {\n const keys = Object.keys(d[secondaryField]).sort((a, b) => {\n return d[secondaryField][a] - d[secondaryField][b];\n });\n\n colorFieldObj[secondaryField] = lookupByBucket(\n keys,\n keys.map(k => d[secondaryField][k]),\n i + 1,\n );\n }\n\n arr.push({\n ...datum,\n ...colorFieldObj,\n gemini_id: d.gemini_ids ? d.gemini_ids[i] : counter,\n [CONF.X_FIELD]: stacked ? xCenter : x,\n [CONF.Y_FIELD]: stacked ? i + 1 : y,\n });\n\n counter++;\n }\n });\n\n return arr;\n };\n\n let gridValues = [];\n\n if (groupKeys.length === 0) {\n gridValues = reduce(specValues);\n } else {\n gridValues = d3.rollups(\n specValues,\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n )\n .flatMap((d) => {\n if (groupKeys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n }\n\n const num_groups = splitOptions.length;\n\n return {\n gridValues,\n domain: [\n -maxCols / 2,\n (num_groups * maxCols) + (num_groups - 1) + maxCols / 2 - 1\n ],\n num_groups\n };\n}\n\n/**\n * Generates infogrid specification\n * @param {Object} spec vega-lite specification\n * @param {Number} rows number of rows in a grid\n * @returns grid specification\n */\nexport function getGridSpec(spec, rows = 10, stacked = false) {\n return new Promise((res) => {\n const { gridValues: grid, domain, num_groups } = generateGrid(spec, rows, stacked);\n const obj = {...spec};\n const encoding = obj.spec ? obj.spec.encoding : obj.encoding;\n\n const dx = stacked ? 1 : 1;\n\n const xDomain = stacked || num_groups === 0 ? [\n d3.min(grid, d => d[CONF.X_FIELD]) - dx,\n d3.max(grid, d => d[CONF.X_FIELD]) + dx\n ] : domain;\n\n const yPadding = (spec.facet && spec.facet.row) ? 0.8 : 0.4;\n\n const yDomain = [\n stacked ? 0 : d3.min(grid, (d) => d[CONF.Y_FIELD]) - yPadding,\n d3.max(grid, (d) => d[CONF.Y_FIELD]) + yPadding + (stacked ? 10 : 0),\n ];\n\n const middle = yDomain[0] + (yDomain[1] - yDomain[0]) / 2;\n\n obj.data.values = grid;\n\n encoding.x.scale = {\n type: \"linear\",\n domain: xDomain,\n };\n\n encoding.y.scale = {\n type: \"linear\",\n domain: [\n Math.min(yDomain[0], middle - rows / 2),\n Math.max(yDomain[1], middle + rows / 2)\n ],\n };\n\n encoding.x.field = CONF.X_FIELD;\n encoding.y.field = CONF.Y_FIELD;\n\n // set axis labels when splitField\n if (spec.meta.splitField) {\n const labels = Array.from(\n new Set(grid.map(d => d[spec.meta.splitField]))\n );\n\n const expr = {};\n\n labels.forEach((d) => {\n // find min and max x values for each label\n const extent = d3.extent(\n spec.data.values.filter(x => x[spec.meta.splitField] === d),\n d => d[CONF.X_FIELD],\n );\n\n const middle = Math.ceil(extent[0] + (extent[1] - extent[0]) / 2);\n expr[middle] = d;\n });\n\n spec.meta.rules = obj.meta.rules = labels.map(m => {\n return {\n filter: `datum['${spec.meta.splitField}'] === '${m}'`,\n groupKey: spec.meta.splitField,\n groupValue: m,\n }\n });\n\n encoding.x.axis = {\n labelExpr: `${JSON.stringify(expr)}[datum.label]`,\n values: Object.keys(expr).map(d => +d),\n labelAngle: -90,\n grid: false,\n title: spec.meta.splitField,\n };\n }\n\n return res(obj);\n });\n}\n\n/**\n * Generates jittered specification using d3-force\n * @param {Object} spec vega-lite specification\n * @returns jittered spec\n */\nexport function getJitterSpec(spec) {\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const width = spec.spec ? spec.spec.width : spec.width;\n const nodes = spec.data.values;\n\n const circleRadius = 4;\n\n let innerGroupCount = 1;\n\n if (spec.meta.splitField) {\n innerGroupCount = new Set(\n nodes.map(d => d[spec.meta.splitField])\n ).size;\n }\n\n const facetSize = width ? width : 150;\n const yExtent = d3.extent(nodes, d => d[CONF.Y_FIELD]);\n const xScale = d3.scaleBand()\n .domain(d3.range(1, innerGroupCount + 1))\n .range([0, facetSize])\n .paddingOuter(0.5);\n\n const arr = nodes.slice().filter(d => d[CONF.Y_FIELD] !== undefined).map((d, i) => {\n d.oldX = d[CONF.X_FIELD];\n d.oldY = d[CONF.Y_FIELD];\n\n let x = xScale(d[CONF.X_FIELD]) + xScale.bandwidth() / 2;\n let y = d[CONF.Y_FIELD];\n\n d.scaledX = Math.round(x);\n\n return {\n ...d,\n x: x,\n y: y,\n };\n });\n\n const simulation = d3\n .forceSimulation(arr)\n .force(\"x\", d3.forceX().x(d => d.x))\n .force(\"y\", d3.forceY().strength(0.002).y(d => d[CONF.Y_FIELD]))\n .force(\"collide\", d3\n .forceCollide()\n .strength(0.01)\n .radius(circleRadius)\n )\n .stop();\n\n return new Promise((res) => {\n const bandwidth = xScale.bandwidth() * 0.9;\n\n for (let i = 0; i < 120; i++) {\n simulation.tick();\n\n arr.forEach(d => {\n const x = xScale(d.oldX);\n d.y = d.oldY;\n \n // restrict to the bounds: [5%, 95%] of width\n d.x = Math.max(\n x + xScale.bandwidth() * 0.05,\n Math.min(x + bandwidth, d.x),\n );\n })\n }\n\n if (encoding.y.scale) {\n encoding.y.scale.domain = yExtent\n } else {\n encoding.y.scale = {\n domain: yExtent\n }\n }\n\n encoding.x.scale = {\n domain: [0, facetSize]\n }\n\n // jitter still needs encoding fields to be x and y,\n // because d3-force uses x and y internally.\n encoding.x.field = \"x\";\n encoding.y.field = \"y\";\n\n // if meta.axes is falsy, and we have custom x-axis\n if (!spec.meta.axes && encoding.x.axis && spec.meta.xAxisLabels) {\n const labels = spec.meta.xAxisLabels;\n\n const axisExpr = {};\n const mapped = labels.map((d, i) => {\n const x = Math.round(xScale(i + 1) + xScale.bandwidth() / 2);\n axisExpr[x] = d;\n return { x, label: d };\n });\n\n encoding.x.axis.labelExpr = `${JSON.stringify(axisExpr)}[datum.label]`;\n encoding.x.axis.values = mapped.map(d => d.x);\n }\n\n return res({\n ...spec,\n data: {\n name: \"source\",\n values: arr,\n },\n });\n });\n}","/**\n * Custom animations generation script.\n * Supports:\n * - count\n * - median\n * - mean\n * - quantile\n * - min\n * - max\n * Inspiration from: https://giorgi-ghviniashvili.github.io/aggregate-animation-data/designs/\n */\n\nimport { CONF } from \"./config.js\";\nimport { getGridSpec } from \"./layout.js\";\n\n/**\n * Generates a spec for count animation\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {Object} shrink if truthy, circles will be pulled up\n * @returns a vega lite spec\n */\nexport const getCountStep = (source, target, shrink = false) => {\n const { width, height } = target.spec || target;\n let values = source.data.values.slice();\n const sourceMeta = source.meta;\n\n // generate rules layer\n const rules = sourceMeta.rules.map((d, i) => {\n const n = sourceMeta.rules.length;\n return {\n transform: [{ filter: d.filter }],\n name: `rule-${i + 1}`,\n mark: {\n type: \"rule\",\n x: { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: \"count\",\n // axis: null,\n },\n },\n };\n });\n\n if (shrink) {\n values = values.map((d, i) => {\n const y = target.data.values[i][CONF.Y_FIELD];\n return {\n ...d,\n [CONF.Y_FIELD]: y,\n };\n });\n }\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: source.encoding,\n },\n ...rules,\n ],\n };\n};\n\n/**\n * Generates a spec for median and quantile animations\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {Number} step step counter. null is the last step\n * @param {Number} p a percentile\n * @returns a vega lite spec\n */\nexport const getMedianStep = (source, target, step = 0, p = 0.5) => {\n const all_groups = [];\n const { width, height } = target.spec || target;\n const isLast = step === null;\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n const values = [];\n\n const reduce = (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n\n let sorted = data\n .slice()\n .sort((a, b) => {\n const sortFn = hasFacet ? \"descending\" : \"ascending\";\n return d3[sortFn](a[CONF.Y_FIELD], b[CONF.Y_FIELD]);\n })\n .map((d, i) => {\n return {\n ...d,\n rank: i + 1,\n };\n });\n\n // inspired by median animation https://uwdata.github.io/gemini2-editor/ \n const y_median = d3.quantile(sorted, p, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const y_median_pos = hasFacet ? data[0].scaleY(y_median) : y_median;\n const median_rank = d3.quantile(sorted, 0.5, (d) => d.rank);\n const max_rank = d3.max(sorted, (d) => d.rank);\n const diff = isLast ? null : max_rank - median_rank - step;\n const dx = hasFacet ? 5 : 0.1;\n\n sorted = sorted.map((d) => {\n const rank_delta_abs = Math.abs(d.rank - median_rank);\n const y_delta = (hasFacet ? d.oldY : d[CONF.Y_FIELD]) - y_median;\n const bisection =\n diff !== null && rank_delta_abs <= diff ? 0 : y_delta > 0 ? 1 : -1;\n\n let newField = null;\n\n if (bisection === -1) {\n newField = d[CONF.X_FIELD] - dx;\n } else if (bisection === 1) {\n newField = d[CONF.X_FIELD] + dx;\n } else {\n newField = d[CONF.X_FIELD];\n }\n\n return {\n ...d,\n bisection,\n [CONF.X_FIELD + \"_pos\"]: newField,\n y_median,\n y_median_pos,\n };\n });\n\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue} && datum.bisection === 0`;\n let groupFilter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupFilter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupFilter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupFilter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupFilter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n all_groups.push({\n filter,\n groupFilter,\n groupValue,\n groupKey: CONF.X_FIELD,\n median: y_median,\n groupId,\n median_pos: y_median_pos,\n rankDiff: Math.abs(max_rank - median_rank),\n rule_start: d3.min(sorted, (d) => d[CONF.X_FIELD + \"_pos\"]) + 1,\n rule_end: d3.max(sorted, (d) => d[CONF.X_FIELD + \"_pos\"]) - 1,\n });\n\n values.push(...sorted);\n };\n\n const groupKeys = [CONF.X_FIELD];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n d3.rollup(\n source.data.values.slice(),\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = [];\n\n let ruleField = isLast ? \"y_median\" : CONF.Y_FIELD;\n\n if (hasFacet) {\n ruleField = isLast ? \"y_median_pos\" : CONF.Y_FIELD;\n }\n\n all_groups.forEach((d, i) => {\n const n = all_groups.length;\n\n const top_rule = {\n transform: isLast ? [{ filter: d.groupFilter }] : [{ filter: d.filter }],\n name: `top_rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? d.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: ruleField,\n type: \"quantitative\",\n aggregate: \"max\",\n axis: null,\n },\n },\n };\n\n const bottom_rule = {\n transform: isLast ? [{ filter: d.groupFilter }] : [{ filter: d.filter }],\n name: `bottom_rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? d.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: ruleField,\n type: \"quantitative\",\n aggregate: \"min\",\n axis: null,\n },\n },\n };\n\n rules.push(top_rule, bottom_rule);\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n x: {\n ...source.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n color: source.encoding.color\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Generates a spec for mean animation\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @returns a vega lite spec\n */\nexport const getMeanStep = (source, target) => {\n const all_groups = [];\n const { width, height } = target.spec || target;\n const domain = source.encoding.y.scale.domain;\n\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n\n const values = [];\n\n const reduce = (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n\n let sorted = data\n .slice()\n .sort((a, b) => {\n const sortFn = hasFacet ? \"descending\" : \"ascending\";\n return d3[sortFn](a[CONF.Y_FIELD], b[CONF.Y_FIELD]);\n })\n .map((d, i) => {\n return {\n ...d,\n rank: i + 1,\n };\n });\n\n const y_mean = d3.mean(sorted, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const y_mean_pos = hasFacet ? data[0].scaleY(y_mean) : y_mean;\n const mean_rank = d3.mean(sorted, (d) => d.rank);\n const max_rank = d3.max(sorted, (d) => d.rank);\n const dividor = max_rank * 1.4;\n const multiplier = hasFacet ? 25 : 1;\n\n sorted = sorted.map((d) => {\n const rankRatio_from_mean = (d.rank - mean_rank) / dividor;\n\n const rankRatio_from_mean_start = (d.rank - 0.5 - mean_rank) / dividor;\n const rankRatio_from_mean_end = (d.rank + 0.5 - mean_rank) / dividor;\n\n return {\n ...d,\n [CONF.X_FIELD + \"_pos\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean * multiplier,\n [CONF.X_FIELD + \"_pos_start\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean_start * multiplier,\n [CONF.X_FIELD + \"_pos_end\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean_end * multiplier,\n y_mean,\n y_mean_pos,\n };\n });\n\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n all_groups.push({\n filter,\n groupValue,\n groupKey: CONF.X_FIELD,\n groupId: groupId,\n mean: y_mean,\n mean_pos: y_mean_pos,\n rule_start: d3.min(sorted, (d) => d[CONF.X_FIELD + \"_pos_start\"]),\n rule_end: d3.max(sorted, (d) => d[CONF.X_FIELD + \"_pos_end\"]),\n });\n\n values.push(...sorted);\n\n return sorted;\n };\n\n const groupKeys = [CONF.X_FIELD];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n d3.rollups(\n source.data.values.slice(),\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = [];\n\n all_groups.forEach((d, i) => {\n const n = all_groups.length;\n\n const rule = {\n transform: [{ filter: d.filter }],\n name: `rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : {\n expr: `${i + 1} * (width / ${n + 1}) - (width / ${n + 1}) * 0.35`,\n },\n x2: hasFacet\n ? d.rule_end\n : {\n expr: `${i + 1} * (width / ${n + 1}) + (width / ${n + 1}) * 0.35`,\n },\n },\n encoding: {\n y: {\n field: hasFacet ? \"y_mean_pos\" : CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: \"mean\",\n axis: null,\n scale: { domain },\n },\n },\n };\n\n rules.push(rule);\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n x: {\n ...source.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Generates a spec for min and max animations\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {String} minOrMax \"min\" or \"max\"\n * @returns a vega lite spec\n */\nexport const getMinMaxStep = (source, target, minOrMax = \"min\") => {\n const { width, height } = target.spec || target;\n const aggrFn = minOrMax === \"min\" ? d3.min : d3.max;\n const domain = source.encoding.y.scale.domain;\n const groupKeys = [CONF.X_FIELD];\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n\n const values = [];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n const all_groups = [];\n\n d3.rollup(\n source.data.values.slice(),\n (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n const aggr = aggrFn(data, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const aggr_pos = hasFacet ? data[0].scaleY(aggr) : aggr;\n\n all_groups.push({\n filter,\n groupValue,\n groupKey: CONF.X_FIELD,\n aggr,\n aggr_pos,\n groupId,\n rule_start: d3.min(data, (d) => d[CONF.X_FIELD] - 2),\n rule_end: d3.max(data, (d) => d[CONF.X_FIELD] + 2),\n });\n\n const g = data.find((d) => {\n const v = hasFacet ? d.oldY : d[CONF.Y_FIELD];\n return v === aggr;\n });\n\n values.push(\n ...data.map((d) => {\n const isAggr = g && g.gemini_id === d.gemini_id;\n\n return {\n ...d,\n isAggr,\n aggr_pos,\n };\n })\n );\n },\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = all_groups.map((group, i) => {\n const n = all_groups.length;\n return {\n transform: [{ filter: group.filter }],\n name: `rule_${group.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? group.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? group.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: hasFacet ? \"aggr_pos\" : CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: minOrMax,\n axis: null,\n scale: { domain },\n },\n },\n };\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values: values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Configuration for custom animations.\n * When meta.custom_animation is present, \n * it looks up a function here and generates custom animation specifications\n */\nexport const CustomAnimations = {\n /**\n * steps:\n * 1) stack sets\n * 2) put rules (lines) using aggregate count\n * 3) replace with count bubbles (aggregate count) (basically target spec)\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n count: async (rawSource, target) => {\n const stacks = await getGridSpec(rawSource, 10, true);\n delete stacks.encoding.y.axis;\n const rules = getCountStep(rawSource, target, false);\n const pullUp = getCountStep(rawSource, target, true);\n return [stacks, rules, pullUp, target];\n },\n /**\n * min animation steps:\n * 1) source spec\n * 2) stack sets, with a rule line at min circle\n * 3) pull circles down\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n min: (rawSource, target) => {\n const step_1 = getMinMaxStep(rawSource, target, \"min\");\n\n const step_2 = {\n ...step_1,\n transform: [{ filter: \"datum.isAggr === true\" }],\n layer: [\n {\n ...step_1.layer[0],\n encoding: {\n ...step_1.layer[0].encoding,\n y: {\n ...step_1.layer[0].encoding.y,\n aggregate: \"min\",\n },\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n\n return [rawSource, step_1, step_2, target];\n },\n /**\n * max animation steps:\n * 1) source spec\n * 2) stack sets, with a rule line at max circle\n * 3) pull circles up\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n max: (rawSource, target, source) => {\n const step_1 = getMinMaxStep(rawSource, target, \"max\");\n\n const step_2 = {\n ...step_1,\n transform: [{ filter: \"datum.isAggr === true\" }],\n layer: [\n {\n ...step_1.layer[0],\n encoding: {\n ...step_1.layer[0].encoding,\n y: {\n ...step_1.layer[0].encoding.y,\n aggregate: \"max\",\n },\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n\n return [rawSource, step_1, step_2, target];\n },\n /**\n * mean animation steps:\n * 1) source spec\n * 2) intermediate: circles will be placed diagonally \"/\" \n * 3) add lines (rules) at mean level\n * 4) convert circles to small ticks\n * 5) show vertical lines\n * 6) collapse the lines to mean level\n * 7) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n mean: (rawSource, target) => {\n const step_1 = getMeanStep(rawSource, target);\n\n const barWidth = 2;\n\n const step_2 = {\n ...step_1,\n layer: [\n {\n name: \"main\",\n mark: { type: \"tick\", orient: \"horizontal\", width: barWidth },\n encoding: {\n y: {\n ...rawSource.encoding.y,\n },\n x: {\n ...rawSource.encoding.x,\n field: CONF.X_FIELD + \"_pos_start\",\n },\n x2: {\n field: CONF.X_FIELD + \"_pos_end\",\n },\n color: rawSource.encoding.color\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n const step_3 = {\n ...step_2,\n layer: [\n {\n ...step_2.layer[0],\n mark: {\n type: \"bar\",\n width: barWidth,\n },\n encoding: {\n ...step_2.layer[0].encoding,\n y2: {\n field: \"y_mean_pos\",\n },\n },\n },\n ...step_2.layer.slice(1),\n ],\n };\n const step_4 = {\n ...step_2,\n layer: [\n {\n ...step_2.layer[0],\n mark: {\n type: \"bar\",\n width: barWidth,\n },\n encoding: {\n ...step_2.layer[0].encoding,\n y: {\n ...step_2.layer[0].encoding.y,\n field: \"y_mean_pos\",\n },\n y2: {\n field: \"y_mean_pos\",\n },\n },\n },\n ...step_2.layer.slice(1),\n ],\n };\n\n const intermediate = {\n ...rawSource,\n data: {\n values: step_1.data.values,\n },\n encoding: {\n ...rawSource.encoding,\n x: {\n ...rawSource.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n },\n };\n\n return [rawSource, intermediate, step_1, step_2, step_3, step_4, target];\n },\n /**\n * median and quantile animation steps:\n * 1) source spec\n * 2) show rules at the top and bottom\n * 3) split circles by median and move to the right and left and move rules to median level\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n median: (rawSource, target, calculatedSource, p) => {\n const percent = (p === undefined || p === null) ? 0.5 : p;\n const initial = getMedianStep(rawSource, target, 0, percent);\n const last_with_points = getMedianStep(rawSource, target, null, percent);\n\n return [\n rawSource,\n initial,\n last_with_points,\n target\n ];\n },\n};\n","/**\n * Hack faceted view since gemini.js does not support multi view animations\n * Finding coordinates of each circle and treat them as real values in the one axis view \n * Adding axis layer underneath to look exactly same as faceted view\n */\n\nimport { CONF, META_PARSE_VALUES } from \"./config.js\";\n\n/**\n * Get empty spec, if no data is present\n * @param {Object} spec \n * @returns vega-lite spec\n */\nexport function getEmptySpec(spec) {\n const description = spec.meta.description;\n const splitField = spec.meta.splitField;\n\n return {\n $scheme: CONF.SCHEME,\n width: 300,\n height: 300,\n meta: {\n description,\n axes: false,\n },\n data: {\n values: [\n {\n [CONF.X_FIELD]: 0,\n [CONF.Y_FIELD]: 0,\n },\n ],\n },\n mark: {\n type: \"point\",\n filled: true,\n strokeWidth: 1,\n color: \"transparent\",\n },\n encoding: {\n x: {\n field: CONF.X_FIELD,\n type: \"quantitative\",\n scale: {\n domain: [-5, 5],\n },\n axis: {\n grid: false,\n ticks: false,\n title: splitField,\n domain: false,\n values: [],\n },\n },\n y: {\n field: CONF.Y_FIELD,\n type: \"quantitative\",\n scale: {\n domain: [-5, 5],\n },\n axis: {\n grid: false,\n ticks: false,\n title: null,\n domain: false,\n values: [],\n },\n },\n },\n };\n}\n\n/**\n * Creates and returns a template for vega spec\n * @param {Number} width spec width\n * @param {Number} height spec height\n * @param {Object} axes which axes to add\n * @param {Object} spec original spec\n * @returns vega-lite spec\n */\nexport function getSpecTemplate(width, height, axes = { x: true, y: true }, spec) {\n const encoding = spec.spec.encoding;\n const mark = spec.spec.mark;\n const facet = spec.facet;\n\n if (encoding.x) {\n const title = facet && facet.column ? facet.column.title : null;\n\n encoding.x = {\n field: CONF.X_FIELD,\n type: \"quantitative\",\n scale: {},\n axis: axes.x\n ? {\n labelExpr: \"\",\n values: [],\n title: title,\n grid: false,\n orient: \"top\",\n ticks: false,\n domain: false,\n labelPadding: 10,\n }\n : null,\n };\n }\n\n if (encoding.y) {\n const title = facet && facet.row ? facet.row.title : null;\n\n encoding.y = {\n field: spec.spec.mark === \"errorbar\" ? encoding.y.field : CONF.Y_FIELD,\n type: \"quantitative\",\n scale: {},\n axis: axes.y\n ? {\n labelExpr: \"\",\n values: [],\n title: title,\n grid: false,\n labelAngle: 90,\n domain: false,\n ticks: false,\n labelPadding: 10,\n orient: \"right\",\n }\n : null,\n };\n }\n\n const additionals = {};\n\n if (spec.transform) {\n additionals.transform = spec.transform;\n }\n\n return {\n $schema: CONF.SCHEME,\n data: {\n values: [],\n },\n width: width,\n height: height,\n mark: mark,\n encoding: encoding,\n ...additionals,\n };\n}\n\n/**\n * Get hacked spec\n * Finding coordinates of each circle and treat them as real values in the one axis view \n * Adding axis layer underneath to look exactly same as faceted view\n * @param {Object} param0 parameters\n * @param {Object} param0.view a vega view instance\n * @param {Object} param0.spec a vega spec\n * @param {Object} param0.width spec width\n * @param {Object} param0.height spec height\n * @returns vega-lite spec\n */\nexport function getHackedSpec({ view, spec, width = 600, height = 600 }) {\n const rowId = spec.facet.row ? spec.facet.row.field : null;\n const colId = spec.facet.column ? spec.facet.column.field : null;\n\n const newSpec = getSpecTemplate(\n width,\n height,\n {\n x: colId,\n y: rowId,\n },\n spec\n );\n\n const yDomain = [height, 0];\n const xDomain = [0, width];\n\n const values = [];\n\n const colMap = new Map();\n const rowMap = new Map();\n\n const scaleX = view.scale(\"x\");\n const scaleY = view.scale(\"y\");\n const source = view.data(\"source\");\n\n let row_header, column_header;\n\n // y axis\n if (rowId && (row_header = view.data(\"row_header\"))) {\n const yAxisValues = [];\n const yAxisExpr = {};\n\n row_header.forEach((d, i) => {\n const bounds = d.bounds;\n const name = d.datum[rowId];\n const y1 = bounds.y1;\n const y2 = bounds.y2;\n\n rowMap.set(name, y1);\n\n const yCoord = Math.round(y1 + (y2 - y1) / 2);\n\n yAxisValues.push(yCoord);\n yAxisExpr[yCoord] = name;\n });\n\n yDomain[1] = d3.min(row_header, (d) => d.bounds.y1);\n yDomain[0] = d3.max(row_header, (d) => d.bounds.y2);\n\n newSpec.encoding.y.axis.values = yAxisValues;\n newSpec.encoding.y.axis.labelExpr = `${JSON.stringify(\n yAxisExpr\n )}[datum.label]`;\n }\n\n // x axis\n if (colId && (column_header = view.data(\"column_header\"))) {\n const xAxisValues = [];\n const xAxisExpr = {};\n\n column_header.forEach((d, i) => {\n const bounds = d.bounds;\n\n const name = d.datum[colId];\n colMap.set(name, bounds.x1);\n\n const xCoord = Math.round(bounds.x1 + (bounds.x2 - bounds.x1) / 2);\n\n xAxisValues.push(xCoord);\n xAxisExpr[xCoord] = name;\n });\n\n xDomain[0] = d3.min(column_header, (d) => d.bounds.x1);\n xDomain[1] = d3.max(column_header, (d) => d.bounds.x2);\n\n newSpec.encoding.x.axis.values = xAxisValues;\n newSpec.encoding.x.axis.labelExpr = `${JSON.stringify(\n xAxisExpr\n )}[datum.label]`;\n }\n\n // generating data.values\n source.forEach((d) => {\n const col = d[colId];\n const row = d[rowId];\n\n const xStart = colMap.get(col) || 0;\n const yStart = rowMap.get(row) || 0;\n\n const xField = spec.meta.parse === META_PARSE_VALUES.jitter ? \"x\" : CONF.X_FIELD;\n const yField = spec.meta.parse === META_PARSE_VALUES.jitter ? \"y\" : CONF.Y_FIELD;\n\n const xCoord = xStart + scaleX(d[xField]);\n\n values.push({\n ...d,\n [CONF.X_FIELD]: xCoord,\n [CONF.Y_FIELD]: yStart + scaleY(d[yField]),\n [CONF.X_FIELD + \"_num\"]: d.scaledX ? xStart + scaleX(d.scaledX) : xCoord,\n scaleX: (val) => yStart + scaleX(val),\n scaleY: (val) => yStart + scaleY(val),\n });\n });\n\n newSpec.encoding.x.scale.domain = xDomain;\n newSpec.encoding.y.scale.domain = yDomain;\n newSpec.data.values = values;\n newSpec.width = xDomain[1] - xDomain[0];\n newSpec.height = yDomain[0] - yDomain[1];\n\n return newSpec;\n}\n\n/**\n * turns faceted spec to regular spec, using hacking technique\n * @param {Object} spec vega lite spec with facets\n * @returns vega-lite spec\n */\nexport function hackFacet(spec) {\n const div = document.createElement(\"div\");\n\n spec.data.name = \"source\";\n\n return vegaEmbed(div, spec, { renderer: \"svg\" }).then((resp) => {\n const newSpec = getHackedSpec({\n ...resp,\n width: spec.spec.width,\n height: spec.spec.height,\n });\n\n if (spec.config) {\n newSpec.config = spec.config;\n }\n\n if (spec.meta) {\n newSpec.meta = spec.meta;\n }\n\n let [transformX, transformY] = resp.view._origin;\n\n if (!(spec.facet && spec.facet.row && !spec.facet.column)) {\n transformY = 0;\n }\n\n if (newSpec.meta) {\n newSpec.meta.transformX = transformX;\n newSpec.meta.transformY = transformY;\n } else {\n newSpec.meta = { transformX, transformY };\n }\n\n return newSpec;\n });\n}\n","/**\n * Entry point of Datamations JavaScript code\n * Reads vega-lite specifications, converts to vega specs and animates them\n *\n * ### Dependencies:\n * - gemini: https://github.com/uwdata/gemini\n * - vega-lite: https://vega.github.io/vega-lite/\n * - vega: https://vega.github.io/vega/\n * - vega-embed: https://github.com/vega/vega-embed\n * - d3: https://d3js.org/\n * - gifshot: https://github.com/yahoo/gifshot\n * - html2canvas: https://html2canvas.hertzen.com/\n * - download2: http://danml.com/download.html\n */\n\nimport { CONF, META_PARSE_VALUES } from \"./config.js\";\nimport { getSelectors, splitLayers, getRows } from \"./utils.js\";\nimport { hackFacet, getEmptySpec } from \"./hack-facet-view.js\";\nimport { getGridSpec, getJitterSpec } from \"./layout.js\";\nimport { CustomAnimations } from \"./custom-animations.js\";\n\n/**\n *\n * @param {String} id conteiner id\n * @param {Object} param1 configuration object\n * @param {Array} param1.specs list of vega-lite specifications\n * @param {Boolean} param1.autoPlay autoPlay\n * @param {Number} param1.frameDel frame duration (in ms.)\n * @param {Number} param1.frameDel delay between frames (in ms.)\n * @returns an object of exposed functions\n */\nexport default function App(id, { specs, autoPlay = false, frameDur, frameDel }) {\n let rawSpecsImmutable; // saving passed specs here, not changed by reference\n let rawSpecs; // holds raw vega-lite specs, not transformed\n let vegaLiteSpecs;\n let vegaSpecs; // vega specs\n let frames;\n let metas;\n let frameIndex = 0;\n let timeoutId;\n let playing = false;\n let initializing = false;\n let frameDuration = frameDur || 2000;\n let frameDelay = frameDel || 1000;\n\n // a fallback gemini spec in case gemini.animate could not recommend anything\n const gemSpec = {\n timeline: {\n concat: [\n {\n sync: [\n {\n component: {\n mark: \"marks\",\n },\n change: {\n data: {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: false,\n },\n encode: {\n update: true,\n enter: true,\n exit: true,\n },\n },\n timing: {\n duration: {\n ratio: 1,\n },\n },\n },\n ],\n },\n ],\n },\n totalDuration: frameDuration,\n };\n\n /**\n * Resets all the instance variables to be able to re-run animation\n */\n const reset = () => {\n vegaLiteSpecs = [];\n vegaSpecs = [];\n rawSpecs = [];\n rawSpecsImmutable = [];\n frames = [];\n metas = [];\n frameIndex = 0;\n playing = false;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n /**\n * Initializes datamation app\n */\n async function init() {\n // ignore all subsequent init calls.\n if (initializing) return;\n initializing = true;\n\n const { slider } = getSelectors(id);\n\n reset();\n\n // load or set data\n if (specs) {\n vegaLiteSpecs = JSON.parse(JSON.stringify(specs));\n }\n\n // save raw specs to use for facet axes drawing\n vegaLiteSpecs.forEach((d) => {\n rawSpecs.push(JSON.parse(JSON.stringify(d)));\n rawSpecsImmutable.push(JSON.parse(JSON.stringify(d)));\n\n if (d.meta) {\n metas.push(d.meta);\n }\n });\n\n d3.select(slider).property(\"max\", vegaLiteSpecs.length - 1);\n\n // parse, jitter, layer splitting\n await transformSpecs();\n\n // compile to vega\n toVegaSpecs();\n\n // create frames for animation\n await makeFrames();\n\n drawSpec(0);\n\n if (autoPlay) {\n setTimeout(play, 100);\n }\n\n initializing = false;\n }\n\n /**\n * Plays animation\n */\n function play(cb = () => {}) {\n playing = true;\n frameIndex = 0;\n\n const tick = () => {\n animateFrame(frameIndex, cb).then(() => {\n if (playing) {\n frameIndex++; // next frame\n\n if (frames[frameIndex]) {\n tick();\n } else {\n playing = false;\n disableEnable(\"enable\");\n }\n }\n });\n\n if (typeof HTMLWidgets !== \"undefined\" && HTMLWidgets.shinyMode) {\n var prevIndex = frameIndex - 1;\n Shiny.onInputChange(\"slider_state\", prevIndex);\n }\n };\n\n disableEnable(\"disable\");\n tick();\n }\n\n /**\n * Draws vega lite spec statically (without transition), also updates slider, description, show/hides some layers\n * @param {Number} index specification index in vegaLiteSpecs\n * @param {Object} vegaSpec source vega spec of current frame\n * @returns a promise of vegaEmbed\n */\n function drawSpec(index, vegaSpec) {\n let spec = vegaLiteSpecs[index];\n\n if (!spec) return;\n\n if (spec.custom) {\n spec = gemini.vl2vg4gemini(spec.sequence[spec.sequence.length - 1]);\n }\n\n const meta = metas[index];\n\n const {\n axisSelector,\n visSelector,\n descr,\n slider,\n otherLayers,\n controls,\n exportWrap,\n } = getSelectors(id);\n\n d3.select(slider).property(\"value\", index);\n d3.select(descr).html(meta.description || \"frame \" + index);\n d3.select(axisSelector)\n .style(\"opacity\", meta.axes ? 1 : 0)\n .html(\"\");\n d3.select(visSelector).classed(\"with-axes\", meta.axes);\n d3.select(otherLayers).classed(\"with-axes\", meta.axes);\n\n // draw axis\n if (meta.axes) {\n drawAxis(index);\n }\n\n const transformX = meta.transformX || 0;\n const transformY = meta.transformY || 0;\n\n // shift vis\n d3.select(visSelector)\n .style(\"left\", transformX + \"px\")\n .style(\"top\", transformY + \"px\");\n\n const _width = spec.width + transformX + 10;\n d3.select(controls).style(\"width\", _width + \"px\");\n d3.select(descr).style(\"width\", _width + \"px\");\n\n // draw vis\n return drawChart(spec, vegaSpec && vegaSpec.custom ? null : vegaSpec);\n }\n\n /**\n * Draws a chart, either spec or vegaSpec (which is passed from animate function)\n * Supports single view as well as multiple view chart\n * @param {Object} spec vega-lite spec\n * @param {Object} vegaSpec source vega spec of current frame\n * @returns a promise of vegaEmbed\n */\n function drawChart(spec, vegaSpec) {\n const { visSelector, otherLayers } = getSelectors(id);\n const layers = document.querySelector(otherLayers);\n layers.innerHTML = \"\";\n\n if (Array.isArray(spec)) {\n return new Promise((res) => {\n spec.forEach((s, i) => {\n let target,\n embedSpec = s;\n\n if (s.meta.animated) {\n target = visSelector;\n if (vegaSpec) {\n embedSpec = vegaSpec;\n }\n } else {\n const div = document.createElement(\"div\");\n div.classList.add(\"vega-hidden-layer\");\n layers.appendChild(div);\n target = div;\n }\n\n vegaEmbed(target, embedSpec, { renderer: \"svg\" }).then(() => {\n if (i === spec.length - 1) {\n res();\n }\n\n // ensure facet translations match in axisSelector and otherLayers\n setTimeout(() => {\n adjustAxisAndErrorbars();\n }, 100);\n });\n });\n });\n } else {\n return vegaEmbed(visSelector, vegaSpec || spec, { renderer: \"svg\" });\n }\n }\n\n /**\n * Fixes hacked axis spec and error bar alignment\n */\n function adjustAxisAndErrorbars() {\n const { axisSelector, otherLayers } = getSelectors(id);\n const axisCells = d3\n .select(axisSelector)\n .selectAll(\".mark-group.cell>g\")\n .nodes();\n const otherLayersCells = d3\n .select(otherLayers)\n .selectAll(\".mark-group.cell>g\")\n .nodes();\n\n if (axisCells.length === otherLayersCells.length) {\n for (let i = 0; i < axisCells.length; i++) {\n const transform = axisCells[i].getAttribute(\"transform\");\n otherLayersCells[i].setAttribute(\"transform\", transform);\n }\n }\n }\n\n /**\n * Draws an axis layer. This is called when meta.axes = true.\n * @param {Number} index specification index in vegaLiteSpecs\n * @returns a promise of vegaEmbed\n */\n function drawAxis(index) {\n let spec = rawSpecs[index];\n\n if (spec.spec && spec.spec.layer) {\n const split = splitLayers(spec);\n spec = split[1];\n }\n\n const columnFacet = spec.facet && spec.facet.column;\n const { axisSelector, controls, descr, otherLayers } = getSelectors(id);\n\n // update axis domain to matched hacked facet view\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n\n if (!encoding.y.scale) {\n const extentY = d3.extent(spec.data.values, (d) => d[CONF.Y_FIELD]);\n encoding.y.scale = { domain: extentY };\n }\n\n if (encoding.color) {\n encoding.color.legend = null;\n }\n\n if (encoding.fill) {\n encoding.fill.legend = null;\n }\n\n if (encoding.x && encoding.x.axis) {\n encoding.x.axis.labelAngle = -90;\n encoding.x.axis.titleOpacity = 0;\n }\n\n return vegaEmbed(axisSelector, spec, { renderer: \"svg\" }).then(() => {\n if (columnFacet && columnFacet.title) {\n const fn = function () {\n const transform = d3.select(this).attr(\"transform\");\n const x = transform.split(\"(\")[1].split(\",\")[0];\n return `translate(${x}, 40)`;\n };\n\n d3.select(axisSelector + \" svg > g\").attr(\"transform\", fn);\n d3.select(otherLayers + \" svg > g\").attr(\"transform\", fn);\n }\n const width = d3\n .select(axisSelector)\n .node()\n .getBoundingClientRect().width;\n d3.select(controls).style(\"width\", width + \"px\");\n d3.select(descr).style(\"width\", width + \"px\");\n });\n }\n\n /**\n * Animates a frame, from source to target vega specification using gemini\n * @param {Number} index specification index in vegaLiteSpecs\n * @param {Function} cb callback function of each frame drawal\n * @returns a promise of gemini.animate\n */\n async function animateFrame(index, cb) {\n if (!frames[index]) return;\n\n console.log(\"animating frame\", index);\n\n const { axisSelector, visSelector, otherLayers, descr, slider, controls } =\n getSelectors(id);\n\n let { source, target, gemSpec, prevMeta, currMeta } = frames[index];\n let anim = null;\n\n if (source.custom) {\n const _source_spec = gemini.vl2vg4gemini(\n source.sequence[source.sequence.length - 1]\n );\n anim = await gemini.animate(_source_spec, target, gemSpec);\n } else if (target.custom) {\n anim = await gemini.animateSequence(target.sequence, gemSpec);\n } else {\n anim = await gemini.animate(source, target, gemSpec);\n }\n\n let currHasAxes = currMeta.axes;\n let width = target.width;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n // initial frame\n if (index === 0 && cb) cb(0);\n\n return new Promise((res) => {\n drawSpec(index, source).then(() => {\n timeoutId = setTimeout(() => {\n d3.select(descr).html(currMeta.description);\n anim.play(visSelector).then(() => {\n d3.select(slider).property(\"value\", index + 1);\n cb && cb(index + 1);\n res();\n });\n\n const transformX = currMeta.transformX || 0;\n const transformY = currMeta.transformY || 0;\n\n d3.select(visSelector)\n .transition()\n .duration(750)\n .style(\"left\", transformX + \"px\")\n .style(\"top\", transformY + \"px\");\n\n // show/hide axis vega chart\n if (currHasAxes) {\n drawAxis(index + 1);\n d3.select(axisSelector)\n .transition()\n .duration(1000)\n .style(\"opacity\", 1);\n d3.select(visSelector).classed(\"with-axes\", true);\n d3.select(otherLayers).classed(\"with-axes\", true);\n } else {\n d3.select(axisSelector)\n .transition()\n .duration(1000)\n .style(\"opacity\", 0);\n d3.select(visSelector).classed(\"with-axes\", false);\n d3.select(otherLayers).classed(\"with-axes\", false);\n d3.select(controls).style(\"width\", width + transformX + 10 + \"px\");\n d3.select(descr).style(\"width\", width + transformX + 10 + \"px\");\n }\n\n const nextSpec = vegaLiteSpecs[index + 1];\n\n if (nextSpec && Array.isArray(nextSpec)) {\n const statics = nextSpec.filter((d) => !d.meta.animated);\n\n d3.select(otherLayers)\n .html(\"\")\n .style(\"opacity\", 0)\n .transition()\n // .delay(frameDuration / 3)\n .duration(frameDuration / 2)\n .style(\"opacity\", 1);\n\n statics.forEach((s) => {\n const div = document.createElement(\"div\");\n div.classList.add(\"vega-hidden-layer\");\n vegaEmbed(div, s, { renderer: \"svg\" }).then(() => {\n adjustAxisAndErrorbars();\n });\n document.querySelector(otherLayers).appendChild(div);\n });\n } \n }, \n // removed delay between frames for custom animations\n target.custom ? 0 : frameDelay);\n });\n });\n }\n\n /**\n * Transforms specifications into proper format:\n * - meta.grid = generates infogrid\n * - meta.jitter = jitters data using d3.forceCollide\n * - meta.custom_animation = handles custom animation type\n * - spec.layer = splits layers to stack on top on each other\n */\n async function transformSpecs() {\n const rows = getRows(vegaLiteSpecs);\n\n for (let i = 0; i < vegaLiteSpecs.length; i++) {\n let vlSpec = vegaLiteSpecs[i];\n\n if (Array.isArray(vlSpec)) continue; // just sanity check, making sure that it is not an array\n\n // if filter has empty `oneOf`, then generate empty spec and avoid any further processing\n if (\n vlSpec.transform &&\n vlSpec.transform[0].filter &&\n vlSpec.transform[0].filter.oneOf &&\n vlSpec.transform[0].filter.oneOf.length === 0\n ) {\n const emptySpec = getEmptySpec(vlSpec);\n\n metas[i] = emptySpec.meta;\n rawSpecs[i] = emptySpec;\n vlSpec = emptySpec;\n vegaLiteSpecs[i] = emptySpec;\n continue;\n }\n\n const meta = vlSpec.meta;\n const parse = meta.parse;\n\n // parsing\n\n if (meta.custom_animation) {\n let funName = meta.custom_animation;\n let p = null;\n\n // handle quantile\n if (\n Array.isArray(meta.custom_animation) &&\n meta.custom_animation[0] === \"quantile\"\n ) {\n p = meta.custom_animation[1];\n funName = \"median\";\n }\n\n let source = {\n ...rawSpecs[i - 1],\n data: rawSpecsImmutable[i - 1].data,\n };\n let target = vlSpec;\n\n if (rawSpecsImmutable[i - 1].facet) {\n source = {\n ...vegaLiteSpecs[i - 1],\n meta: {\n ...vegaLiteSpecs[i - 1].meta,\n hasFacet: true,\n columnFacet: rawSpecsImmutable[i - 1].facet.column,\n rowFacet: rawSpecsImmutable[i - 1].facet.row,\n },\n data: {\n values: vegaLiteSpecs[i - 1].data.values.map((d) => {\n return {\n ...d,\n [CONF.X_FIELD]: d[CONF.X_FIELD + \"_num\"],\n };\n }),\n },\n };\n }\n\n // if custom animations have facets, fake them before passing to CustomAnimation\n if (vegaLiteSpecs[i].facet) {\n const newSpecTarget = await hackFacet(vegaLiteSpecs[i]);\n vegaLiteSpecs[i] = newSpecTarget;\n target = newSpecTarget;\n }\n\n const fn = CustomAnimations[funName];\n\n if (fn) {\n const sequence = await fn(source, target, vegaLiteSpecs[i - 1], p);\n vegaLiteSpecs[i] = {\n custom: meta.custom_animation,\n sequence,\n };\n }\n } else if (parse === META_PARSE_VALUES.grid) {\n const gridSpec = await getGridSpec(vlSpec, rows);\n\n const enc = gridSpec.spec ? gridSpec.spec.encoding : gridSpec.encoding;\n rawSpecs[i].data.values = gridSpec.data.values;\n\n // update domain for raw spec axis layer\n if (rawSpecs[i].meta.axes && rawSpecs[i].meta.splitField) {\n const encoding = rawSpecs[i].spec\n ? rawSpecs[i].spec.encoding\n : rawSpecs[i].encoding;\n\n encoding.x.axis = enc.x.axis;\n encoding.y.scale = {\n domain: enc.y.scale.domain,\n };\n encoding.x.scale = {\n domain: enc.x.scale.domain,\n };\n }\n\n vegaLiteSpecs[i] = gridSpec;\n } \n else if (parse === META_PARSE_VALUES.jitter) {\n vegaLiteSpecs[i] = await getJitterSpec(vlSpec);\n } \n // since gemini does not support multiple multiple axis transitions, \n // we must split the layers and draw as separate vega spec\n else if (vlSpec.layer || (vlSpec.spec && vlSpec.spec.layer)) {\n const arr = splitLayers(vlSpec);\n\n vegaLiteSpecs[i] = [];\n\n for (let j = 0; j < arr.length; j++) {\n const s = arr[j];\n\n // fake facets\n if (s.facet && s.spec && s.meta.animated) {\n const newSpec = await hackFacet(s);\n vegaLiteSpecs[i].push(newSpec);\n metas[i] = newSpec.meta;\n } else {\n vegaLiteSpecs[i].push(s);\n }\n }\n }\n\n if (vegaLiteSpecs[i]) {\n const facet = vegaLiteSpecs[i].facet;\n const spec = vegaLiteSpecs[i].spec;\n\n // fake facets\n if (facet && spec) {\n const newSpec = await hackFacet(vegaLiteSpecs[i]);\n vegaLiteSpecs[i] = newSpec;\n }\n }\n }\n\n console.log(\"parsed specs:\", vegaLiteSpecs);\n }\n\n /**\n * Converts vega-lite specs to vega specs using vl2vg4gemini (https://github.com/uwdata/gemini#vl2vg4gemini)\n */\n function toVegaSpecs() {\n vegaSpecs = vegaLiteSpecs.map((d) => {\n if (d.custom) {\n return d;\n }\n\n const s = Array.isArray(d) ? d.find((d) => d.meta.animated) : d;\n return gemini.vl2vg4gemini(s);\n });\n }\n\n /**\n * Generates animation frames\n * @returns array of objects of \\{ source, target, gemSpec, prevMeta, currMeta \\}\n */\n async function makeFrames() {\n const options = {\n stageN: 1,\n\n scales: {\n x: {\n domainDimension: \"diff\",\n },\n y: {\n domainDimension: \"diff\",\n },\n },\n\n marks: {\n marks: {\n change: {\n scale: [\"x\", \"y\"],\n data: {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: true,\n },\n encode: {\n update: true,\n enter: true,\n exit: true,\n },\n },\n },\n },\n totalDuration: frameDuration,\n };\n\n for (let i = 1; i < vegaSpecs.length; i++) {\n const prev = vegaSpecs[i - 1];\n const curr = vegaSpecs[i];\n\n const prevMeta = metas[i - 1];\n const currMeta = metas[i];\n\n try {\n let resp = null;\n\n if (curr.custom) {\n resp = await gemini.recommendForSeq(curr.sequence, {\n ...options,\n stageN: curr.sequence.length - 1,\n totalDuration: frameDuration * 2,\n });\n\n const _gemSpec = resp[0].specs.map((d) => d.spec);\n\n // make sure to add gemini_id to data change.\n // gemini recommend does not add it by itself.\n _gemSpec.forEach((d) => {\n if (d.timeline.concat.length) {\n const first = d.timeline.concat[0].sync[0];\n if (first && first.change && first.change.data) {\n first.change.data = {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: true,\n };\n }\n }\n });\n\n frames.push({\n source: prev,\n target: curr,\n gemSpec: _gemSpec,\n prevMeta,\n currMeta,\n });\n } else {\n resp = await gemini.recommend(\n prev.custom\n ? gemini.vl2vg4gemini(prev.sequence[prev.sequence.length - 1])\n : prev,\n curr,\n options\n );\n\n const _gemSpec = resp[0] ? resp[0].spec : gemSpec;\n const sync = _gemSpec.timeline.concat[0].sync;\n\n if (!sync.some((d) => d.component === \"view\")) {\n sync.push({\n component: \"view\",\n change: {\n signal: [\"width\", \"height\"],\n },\n timing: {\n duration: {\n ratio: 1,\n },\n },\n });\n }\n\n frames.push({\n source: prev,\n target: curr,\n gemSpec: _gemSpec,\n prevMeta,\n currMeta,\n });\n }\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n /**\n * Slider on change callback\n */\n function onSlide() {\n playing = false;\n disableEnable(\"enable\");\n const { slider } = getSelectors(id);\n const index = document.querySelector(slider).value;\n drawSpec(index);\n }\n\n /**\n * Exports png files for each frame\n */\n function exportPNG() {\n const { exportWrap } = getSelectors(id);\n\n const pngs = [];\n\n const callback = (index) => {\n const done = index >= frames.length;\n\n html2canvas(document.querySelector(exportWrap)).then((canvas) => {\n pngs.push(canvas.toDataURL());\n\n if (done) {\n pngs.forEach((uri, i) => {\n var a = document.createElement(\"a\");\n a.href = uri;\n a.download = `frame-${i + 1}.png`;\n a.click();\n });\n }\n });\n };\n\n play(callback);\n }\n\n /**\n * Exports datamation as gif.\n * @param {Boolean} fromWeb truthy if it is called from webpage, falsy from command line tool\n * @returns either base64 string, or downloads .gif file\n */\n function exportGif(fromWeb) {\n const { exportWrap, exportBtn } = getSelectors(id);\n\n if (fromWeb) {\n loaderOnOff(true);\n disableEnable(\"disable\", { slider: true });\n }\n\n let intervalId,\n images = [];\n\n const startInterval = () => {\n if (intervalId) clearInterval(intervalId);\n\n intervalId = setInterval(() => {\n html2canvas(document.querySelector(exportWrap)).then((canvas) => {\n images.push(canvas.toDataURL());\n });\n }, 16.66666);\n };\n\n let maxWidth = 300;\n let maxHeight = 300;\n\n return new Promise((res) => {\n const callback = (index) => {\n const done = index >= frames.length;\n const bound = document\n .querySelector(exportWrap)\n .getBoundingClientRect();\n\n if (bound.width > maxWidth) maxWidth = bound.width;\n if (bound.height > maxHeight) maxHeight = bound.height;\n\n if (done) {\n intervalId && clearInterval(intervalId);\n\n setTimeout(() => {\n gifshot.createGIF(\n {\n images,\n gifWidth: maxWidth,\n gifHeight: maxHeight,\n frameDuration: 2.5,\n },\n function (obj) {\n if (fromWeb) {\n loaderOnOff(false);\n disableEnable(\"enable\", { slider: true });\n }\n\n if (!obj.error) {\n var image = obj.image;\n\n if (fromWeb) {\n download(image, \"animation.gif\", \"image/gif\");\n }\n res(image);\n } else {\n console.error(\"error creating gif\", obj.errorMsg);\n }\n }\n );\n }, 1000);\n } else {\n intervalId && clearInterval(intervalId);\n setTimeout(startInterval, frameDelay);\n }\n };\n\n play(callback);\n });\n }\n\n /**\n * Disables or enables some components\n * @param {String} cmd \"disable\" or \"enable\"\n * @param {Array} components array of components\n */\n function disableEnable(cmd, components) {\n const { replayBtn, exportBtn, slider } = getSelectors(id);\n const arr = [replayBtn, exportBtn];\n\n if (components && components.slider) {\n arr.push(slider);\n }\n\n arr.forEach((sel) => {\n const el = document.querySelector(sel);\n\n if (cmd == \"disable\") {\n el.setAttribute(\"disabled\", \"disabled\");\n } else {\n el.removeAttribute(\"disabled\");\n }\n });\n }\n\n /**\n * Download button icon adjustment\n * @param {Boolean} loading\n */\n function loaderOnOff(loading) {\n const { exportBtn } = getSelectors(id);\n let className = \"fas fa-download\";\n\n if (loading) {\n className = \"fas fa-spinner spin\";\n }\n\n d3.select(exportBtn).select(\"i\").attr(\"class\", className);\n }\n\n init();\n\n return {\n onSlide,\n play,\n exportPNG,\n exportGif,\n animateFrame,\n getFrames: () => frames,\n };\n}\n"],"names":["runtime","exports","undefined","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","key","value","defineProperty","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","state","GenStateSuspendedStart","method","arg","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","done","GenStateSuspendedYield","makeInvokeMethod","fn","call","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","PromiseImpl","invoke","resolve","reject","result","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","globalThis","Function","CONF","X_FIELD","Y_FIELD","ORDER_FIELD","SCHEME","IGNORE_FIELDS","META_PARSE_VALUES","grid","jitter","getSelectors","id","base","axisSelector","visSelector","descr","slider","otherLayers","controls","exportWrap","exportBtn","replayBtn","splitLayers","input","specArray","spec","layer","d","JSON","parse","stringify","animated","meta","encoding","lookupByBucket","words","buckets","findIndex","getRows","vegaLiteSpecs","maxRows","filter","_ref","specWidth","width","specHeight","height","splitField","groupKeys","facet","column","field","row","specValues","data","secondarySplit","indexOf","_d","secondaryField","concat","grouped","d3","rollups","apply","arr","_o","sum","x","n","o","_defineProperty","map","flatMap","maxN","max","rows","Math","ceil","sqrt","floor","generateGrid","stacked","sort","metas","maxCols","splitOptions","Array","from","Set","counter","_d2","reduce","v","j","columns","xCenter","startCol","datum","k","_objectSpread2","y","colorFieldObj","_typeof","a","b","gemini_id","gemini_ids","gridValues","num_groups","domain","getGridSpec","res","_generateGrid","xDomain","min","yPadding","yDomain","middle","scale","labels","expr","extent","rules","m","groupKey","groupValue","axis","labelExpr","labelAngle","title","getJitterSpec","nodes","innerGroupCount","size","facetSize","yExtent","xScale","scaleBand","range","paddingOuter","oldX","oldY","bandwidth","scaledX","round","_objectSpread","simulation","forceSimulation","force","forceX","forceY","strength","forceCollide","radius","tick","axes","xAxisLabels","axisExpr","mapped","label","getCountStep","_count","source","target","shrink","sourceMeta","transform","x2","aggregate","$schema","getMedianStep","step","p","all_groups","_ref2","isLast","hasFacet","sorted","rank","y_median","quantile","y_median_pos","scaleY","median_rank","max_rank","diff","dx","_objectSpread3","rank_delta_abs","abs","y_delta","bisection","newField","groupFilter","groupId","columnFacet","rowFacet","median","median_pos","rankDiff","rule_start","rule_end","_toConsumableArray","rollup","ruleField","top_rule","bottom_rule","color","getMeanStep","_ref3","y_mean","mean","y_mean_pos","mean_rank","dividor","multiplier","_objectSpread4","rankRatio_from_mean","rankRatio_from_mean_start","rankRatio_from_mean_end","mean_pos","rule","getMinMaxStep","_d3","minOrMax","_ref4","aggrFn","aggr","aggr_pos","g","find","isAggr","group","CustomAnimations","count","_asyncToGenerator","_callee","rawSource","stacks","pullUp","_context","_x","_x2","arguments","step_1","step_2","barWidth","orient","step_3","y2","step_4","calculatedSource","percent","getEmptySpec","description","$scheme","filled","strokeWidth","ticks","getSpecTemplate","labelPadding","additionals","getHackedSpec","view","row_header","column_header","_ref2$width","_ref2$height","rowId","colId","newSpec","colMap","Map","rowMap","scaleX","yAxisValues","yAxisExpr","bounds","y1","set","yCoord","xAxisValues","xAxisExpr","x1","xCoord","col","xStart","get","yStart","xField","yField","val","hackFacet","div","document","createElement","vegaEmbed","renderer","resp","config","_resp$view$_origin","_slicedToArray","_origin","transformX","transformY","specs","rawSpecsImmutable","rawSpecs","vegaSpecs","frames","timeoutId","_ref$autoPlay","autoPlay","frameDur","frameDel","frameIndex","playing","initializing","frameDuration","frameDelay","gemSpec","timeline","sync","component","change","update","enter","exit","encode","timing","duration","ratio","totalDuration","clearTimeout","_init","_getSelectors10","select","property","transformSpecs","toVegaSpecs","makeFrames","drawSpec","setTimeout","play","cb","animateFrame","disableEnable","HTMLWidgets","shinyMode","prevIndex","Shiny","onInputChange","index","vegaSpec","custom","gemini","vl2vg4gemini","sequence","html","style","classed","drawAxis","_width","layers","querySelector","innerHTML","isArray","s","embedSpec","classList","add","appendChild","adjustAxisAndErrorbars","drawChart","axisCells","selectAll","otherLayersCells","getAttribute","setAttribute","_getSelectors4","extentY","legend","fill","titleOpacity","attr","split","node","getBoundingClientRect","_animateFrame","_callee2","_getSelectors11","_frames$index","currMeta","anim","_source_spec","currHasAxes","_context2","console","log","animate","animateSequence","transition","nextSpec","statics","_transformSpecs","_callee3","vlSpec","emptySpec","funName","newSpecTarget","gridSpec","enc","_newSpec","_context3","oneOf","custom_animation","_makeFrames","_callee4","options","curr","prevMeta","_gemSpec","_gemSpec2","_context4","stageN","scales","domainDimension","marks","recommendForSeq","first","recommend","some","signal","t0","cmd","components","sel","el","removeAttribute","loaderOnOff","loading","className","init","onSlide","exportPNG","pngs","html2canvas","canvas","toDataURL","uri","href","download","click","exportGif","fromWeb","intervalId","images","startInterval","clearInterval","setInterval","maxWidth","maxHeight","bound","gifshot","createGIF","gifWidth","gifHeight","errorMsg","image","getFrames"],"mappings":"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"}
\ No newline at end of file
diff --git a/inst/htmlwidgets/js/src/dist/esm/index.js.map b/inst/htmlwidgets/js/src/dist/esm/index.js.map
index 69d1ea0a..20ecf3f0 100644
--- a/inst/htmlwidgets/js/src/dist/esm/index.js.map
+++ b/inst/htmlwidgets/js/src/dist/esm/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sources":["../../node_modules/core-js/index.js","../../node_modules/regenerator-runtime/runtime.js","../../scripts/config.js","../../scripts/utils.js","../../scripts/layout.js","../../scripts/custom-animations.js","../../scripts/hack-facet-view.js","../../scripts/app.js"],"sourcesContent":["module.exports = require('./features');\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","export const CONF = {\n X_FIELD: \"datamations_x\",\n Y_FIELD: \"datamations_y\",\n ORDER_FIELD: \"datamations_order\",\n SCHEME: \"https://vega.github.io/schema/vega-lite/v4.json\",\n};\n\nexport const IGNORE_FIELDS = [\n 'tooltip', 'x', 'y',\n 'datamations_x', 'datamations_y'\n];\n\nexport const META_PARSE_VALUES = {\n grid: \"grid\",\n jitter: \"jitter\",\n};","import { IGNORE_FIELDS } from \"./config\";\n\n/**\n * Gets selectors for each componenent, such as slider and animation divs\n * @param {String} id root container id where all the animation components are rendered\n * @returns object of selectors\n */\nexport function getSelectors(id) {\n const base = \"#\" + id;\n\n return {\n axisSelector: base + \" .vega-for-axis\",\n visSelector: base + \" .vega-vis\",\n descr: base + \" .description\",\n slider: base + \" .slider\",\n otherLayers: base + \" .vega-other-layers\",\n controls: base + \" .controls-wrapper\",\n exportWrap: base + \" .export-wrapper\",\n exportBtn: base + \" .export-btn\",\n replayBtn: base + \" .replay-btn\",\n };\n}\n\n/**\n * Splits layers into separate vega-lite specifications, removes layer field\n * @param {Object} input vega-lite specification with layers\n * @returns a list of specs\n */\nexport function splitLayers(input) {\n const specArray = [];\n const spec = input.spec;\n\n if (spec && spec.layer) {\n spec.layer.forEach((d, i) => {\n const obj = JSON.parse(JSON.stringify(input));\n const animated = i === spec.layer.length - 1;\n\n if (obj.meta) {\n obj.meta.animated = animated;\n } else {\n obj.meta = { animated };\n }\n\n obj.spec.encoding = d.encoding;\n obj.spec.mark = d.mark;\n delete obj.spec.layer;\n specArray.push(obj);\n });\n } else if (input.layer) {\n input.layer.forEach((d, i) => {\n const obj = JSON.parse(JSON.stringify(input));\n const animated = i === input.layer.length - 1;\n\n if (obj.meta) {\n obj.meta.animated = animated;\n } else {\n obj.meta = { animated };\n }\n\n obj.encoding = d.encoding;\n obj.mark = d.mark;\n delete obj.layer;\n specArray.push(obj);\n });\n }\n\n return specArray;\n}\n\n/**\n * Looks up a word based of buckets and value.\n * Example:\n * - words: ['a', 'b', 'c']\n * - buckets: [10, 20, 30]\n * - value: 25\n * will return 'c'\n * @param {Array} words list of words\n * @param {Array} buckets list of numbers\n * @param {Number} value score to lookup\n */\nexport function lookupByBucket(words, buckets, value) {\n return words[buckets.findIndex((d) => value <= d)];\n}\n\n/**\n * Finds correct number of rows for grid based on biggest group\n * @param {Array} vegaLiteSpecs an array of vega lite specs\n * @returns a number of rows\n */\nexport function getRows(vegaLiteSpecs) {\n let maxRows = 0;\n\n vegaLiteSpecs\n .filter((d) => d.meta.parse === \"grid\")\n .forEach((spec) => {\n let { width: specWidth, height: specHeight } = spec.spec || spec;\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const splitField = spec.meta.splitField;\n const groupKeys = [];\n\n if (spec.facet) {\n if (spec.facet.column) {\n groupKeys.push(spec.facet.column.field);\n }\n if (spec.facet.row) {\n groupKeys.push(spec.facet.row.field);\n }\n }\n\n let specValues = spec.data.values;\n\n const gap = 2;\n const distance = 4 + gap;\n\n let secondarySplit = Object.keys(encoding).filter((d) => {\n const field = encoding[d].field;\n return (\n field !== splitField &&\n IGNORE_FIELDS.indexOf(d) === -1 &&\n groupKeys.indexOf(field) === -1\n );\n })[0];\n\n // combine groups if secondarySplit\n if (splitField && secondarySplit) {\n const secondaryField = encoding[secondarySplit].field;\n const keys = [...groupKeys, splitField];\n\n const grouped = d3.rollups(\n specValues,\n (arr) => {\n const obj = {};\n let sum = 0;\n\n arr.forEach((x) => {\n sum += x.n;\n obj[x[secondaryField]] = sum;\n });\n\n const o = {\n [splitField]: arr[0][splitField],\n [secondaryField]: obj,\n n: sum,\n };\n\n groupKeys.forEach((x) => {\n o[x] = arr[0][x];\n });\n\n return o;\n },\n ...keys.map((key) => {\n return (d) => d[key];\n })\n );\n\n specValues = grouped.flatMap((d) => {\n if (keys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n\n specWidth = specWidth / grouped.length;\n }\n\n const maxN = d3.max(specValues, (d) => d.n);\n\n let rows = Math.ceil(Math.sqrt(maxN));\n let maxCols = Math.ceil(maxN / rows);\n\n // if horizontal gap is less than 5,\n // then take up all vertical space to increase rows and reduce columns\n if (specWidth / maxCols < 5) {\n rows = Math.floor(specHeight / distance);\n }\n\n if (rows > maxRows) {\n maxRows = rows;\n }\n });\n\n return maxRows;\n}\n","/*\n* Layout generation functions for datamations.\n* Supports:\n* - grid view: meta.parse = \"grid\"\n* - jittered view: meta.parse = \"jitter\"\n*/\nimport { CONF, IGNORE_FIELDS } from \"./config\";\nimport { lookupByBucket } from \"./utils\";\n\n/**\n * Generates data for grid specs\n * @param {Object} spec vega-lite spec\n * @param {Number} rows number of rows\n * @param {Boolean} stacked if true, circles are stacked and vertically aliged\n * @returns an array of objects\n */\nexport function generateGrid(spec, rows = 10, stacked = false) {\n const splitField = spec.meta.splitField;\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const groupKeys = [];\n\n let {width: specWidth} = spec.spec || spec;\n\n if (spec.facet) {\n if (spec.facet.column) {\n groupKeys.push(spec.facet.column.field);\n spec.facet.column.sort = { \"field\": CONF.ORDER_FIELD };\n }\n if (spec.facet.row) {\n groupKeys.push(spec.facet.row.field);\n spec.facet.row.sort = { \"field\": CONF.ORDER_FIELD };\n }\n }\n\n let specValues = spec.data.values;\n\n const metas = [];\n\n specValues.forEach((d, i) => {\n d[CONF.ORDER_FIELD] = i;\n if (d.meta) {\n metas.push(...Object.keys(d.meta));\n }\n });\n\n let secondarySplit = Object.keys(encoding).filter(d => {\n const field = encoding[d].field;\n return field !== splitField &&\n IGNORE_FIELDS.indexOf(d) === -1 &&\n groupKeys.indexOf(field) === -1 &&\n metas.indexOf(field) === -1;\n })[0];\n\n let secondaryField = null;\n\n // combine groups\n // for example, if splitField = player, but color = hit:\n\n // { \"n\": 5, \"player\": \"a\", \"hit\": \"yes\" },\n // { \"n\": 10, \"player\": \"a\", \"hit\": \"no\" },\n // { \"n\": 15, \"player\": \"b\", \"hit\": \"yes\" },\n // { \"n\": 35, \"player\": \"b\", \"hit\": \"no\" }\n\n // after this code block we will get:\n // { \"n\": 15, \"player\": \"a\", \"hit\": { \"yes\": 5, \"no\": 10 } },\n // { \"n\": 50, \"player\": \"b\", \"hit\": { \"yes\": 15, \"no\": 35 } },\n\n if (splitField && secondarySplit) {\n secondaryField = encoding[secondarySplit].field;\n const keys = [...groupKeys, splitField];\n\n const grouped = d3.rollups(\n specValues,\n arr => {\n const obj = {};\n let sum = 0;\n\n arr.forEach(x => {\n sum += x.n;\n obj[x[secondaryField]] = sum;\n });\n\n const o = {\n [splitField]: arr[0][splitField],\n [secondaryField]: obj,\n n: sum,\n };\n\n groupKeys.forEach(x => {\n o[x] = arr[0][x];\n });\n\n return o;\n },\n ...keys.map((key) => {\n return (d) => d[key];\n })\n );\n\n specValues = grouped.flatMap((d) => {\n if (keys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n\n specWidth = specWidth / grouped.length;\n }\n\n let maxCols = Math.ceil(d3.max(specValues, d => d.n) / rows);\n let splitOptions = [];\n\n if (splitField) {\n splitOptions = Array.from(\n new Set(specValues.map((d) => d[splitField]))\n )\n }\n\n let counter = 1;\n\n const reduce = (v) => {\n const arr = [];\n\n v.forEach((d, j) => {\n const n = d.n;\n const columns = Math.ceil(n / rows);\n const xCenter = splitField ? splitOptions.indexOf(d[splitField]) + 1 : 1;\n\n let startCol = (xCenter - 1) * maxCols + j; // inner grid start\n startCol += Math.floor((maxCols - columns) / 2); // center alignment\n\n const datum = {};\n\n // remove n and gemini_ids, we won't need them any more\n Object.keys(d).forEach(k => {\n if (k !== 'n' && k !== 'gemini_ids') {\n datum[k] = d[k];\n }\n });\n\n for (let i = 0; i < n; i++) {\n const x = startCol + Math.floor(i / rows);\n const y = rows - 1 - i % rows;\n const colorFieldObj = {};\n\n // for secondary split, e.g. is_hit, find correct key and value\n if (secondaryField && typeof[d[secondaryField]] === \"object\") {\n const keys = Object.keys(d[secondaryField]).sort((a, b) => {\n return d[secondaryField][a] - d[secondaryField][b];\n });\n\n colorFieldObj[secondaryField] = lookupByBucket(\n keys,\n keys.map(k => d[secondaryField][k]),\n i + 1,\n );\n }\n\n arr.push({\n ...datum,\n ...colorFieldObj,\n gemini_id: d.gemini_ids ? d.gemini_ids[i] : counter,\n [CONF.X_FIELD]: stacked ? xCenter : x,\n [CONF.Y_FIELD]: stacked ? i + 1 : y,\n });\n\n counter++;\n }\n });\n\n return arr;\n };\n\n let gridValues = [];\n\n if (groupKeys.length === 0) {\n gridValues = reduce(specValues);\n } else {\n gridValues = d3.rollups(\n specValues,\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n )\n .flatMap((d) => {\n if (groupKeys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n }\n\n const num_groups = splitOptions.length;\n\n return {\n gridValues,\n domain: [\n -maxCols / 2,\n (num_groups * maxCols) + (num_groups - 1) + maxCols / 2 - 1\n ],\n num_groups\n };\n}\n\n/**\n * Generates infogrid specification\n * @param {Object} spec vega-lite specification\n * @param {Number} rows number of rows in a grid\n * @returns grid specification\n */\nexport function getGridSpec(spec, rows = 10, stacked = false) {\n return new Promise((res) => {\n const { gridValues: grid, domain, num_groups } = generateGrid(spec, rows, stacked);\n const obj = {...spec};\n const encoding = obj.spec ? obj.spec.encoding : obj.encoding;\n\n const dx = stacked ? 1 : 1;\n\n const xDomain = stacked || num_groups === 0 ? [\n d3.min(grid, d => d[CONF.X_FIELD]) - dx,\n d3.max(grid, d => d[CONF.X_FIELD]) + dx\n ] : domain;\n\n const yPadding = (spec.facet && spec.facet.row) ? 0.8 : 0.4;\n\n const yDomain = [\n stacked ? 0 : d3.min(grid, (d) => d[CONF.Y_FIELD]) - yPadding,\n d3.max(grid, (d) => d[CONF.Y_FIELD]) + yPadding + (stacked ? 10 : 0),\n ];\n\n const middle = yDomain[0] + (yDomain[1] - yDomain[0]) / 2;\n\n obj.data.values = grid;\n\n encoding.x.scale = {\n type: \"linear\",\n domain: xDomain,\n };\n\n encoding.y.scale = {\n type: \"linear\",\n domain: [\n Math.min(yDomain[0], middle - rows / 2),\n Math.max(yDomain[1], middle + rows / 2)\n ],\n };\n\n encoding.x.field = CONF.X_FIELD;\n encoding.y.field = CONF.Y_FIELD;\n\n // set axis labels when splitField\n if (spec.meta.splitField) {\n const labels = Array.from(\n new Set(grid.map(d => d[spec.meta.splitField]))\n );\n\n const expr = {};\n\n labels.forEach((d) => {\n // find min and max x values for each label\n const extent = d3.extent(\n spec.data.values.filter(x => x[spec.meta.splitField] === d),\n d => d[CONF.X_FIELD],\n );\n\n const middle = Math.ceil(extent[0] + (extent[1] - extent[0]) / 2);\n expr[middle] = d;\n });\n\n spec.meta.rules = obj.meta.rules = labels.map(m => {\n return {\n filter: `datum['${spec.meta.splitField}'] === '${m}'`,\n groupKey: spec.meta.splitField,\n groupValue: m,\n }\n });\n\n encoding.x.axis = {\n labelExpr: `${JSON.stringify(expr)}[datum.label]`,\n values: Object.keys(expr).map(d => +d),\n labelAngle: -90,\n grid: false,\n title: spec.meta.splitField,\n };\n }\n\n return res(obj);\n });\n}\n\n/**\n * Generates jittered specification using d3-force\n * @param {Object} spec vega-lite specification\n * @returns jittered spec\n */\nexport function getJitterSpec(spec) {\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const width = spec.spec ? spec.spec.width : spec.width;\n const nodes = spec.data.values;\n\n const circleRadius = 4;\n\n let innerGroupCount = 1;\n\n if (spec.meta.splitField) {\n innerGroupCount = new Set(\n nodes.map(d => d[spec.meta.splitField])\n ).size;\n }\n\n const facetSize = width ? width : 150;\n const yExtent = d3.extent(nodes, d => d[CONF.Y_FIELD]);\n const xScale = d3.scaleBand()\n .domain(d3.range(1, innerGroupCount + 1))\n .range([0, facetSize])\n .paddingOuter(0.5);\n\n const arr = nodes.slice().filter(d => d[CONF.Y_FIELD] !== undefined).map((d, i) => {\n d.oldX = d[CONF.X_FIELD];\n d.oldY = d[CONF.Y_FIELD];\n\n let x = xScale(d[CONF.X_FIELD]) + xScale.bandwidth() / 2;\n let y = d[CONF.Y_FIELD];\n\n d.scaledX = Math.round(x);\n\n return {\n ...d,\n x: x,\n y: y,\n };\n });\n\n const simulation = d3\n .forceSimulation(arr)\n .force(\"x\", d3.forceX().x(d => d.x))\n .force(\"y\", d3.forceY().strength(0.002).y(d => d[CONF.Y_FIELD]))\n .force(\"collide\", d3\n .forceCollide()\n .strength(0.01)\n .radius(circleRadius)\n )\n .stop();\n\n return new Promise((res) => {\n const bandwidth = xScale.bandwidth() * 0.9;\n\n for (let i = 0; i < 120; i++) {\n simulation.tick();\n\n arr.forEach(d => {\n const x = xScale(d.oldX);\n d.y = d.oldY;\n \n // restrict to the bounds: [5%, 95%] of width\n d.x = Math.max(\n x + xScale.bandwidth() * 0.05,\n Math.min(x + bandwidth, d.x),\n );\n })\n }\n\n if (encoding.y.scale) {\n encoding.y.scale.domain = yExtent\n } else {\n encoding.y.scale = {\n domain: yExtent\n }\n }\n\n encoding.x.scale = {\n domain: [0, facetSize]\n }\n\n // jitter still needs encoding fields to be x and y,\n // because d3-force uses x and y internally.\n encoding.x.field = \"x\";\n encoding.y.field = \"y\";\n\n // if meta.axes is falsy, and we have custom x-axis\n if (!spec.meta.axes && encoding.x.axis && spec.meta.xAxisLabels) {\n const labels = spec.meta.xAxisLabels;\n\n const axisExpr = {};\n const mapped = labels.map((d, i) => {\n const x = Math.round(xScale(i + 1) + xScale.bandwidth() / 2);\n axisExpr[x] = d;\n return { x, label: d };\n });\n\n encoding.x.axis.labelExpr = `${JSON.stringify(axisExpr)}[datum.label]`;\n encoding.x.axis.values = mapped.map(d => d.x);\n }\n\n return res({\n ...spec,\n data: {\n name: \"source\",\n values: arr,\n },\n });\n });\n}","/**\n * Custom animations generation script.\n * Supports:\n * - count\n * - median\n * - mean\n * - quantile\n * - min\n * - max\n * Inspiration from: https://giorgi-ghviniashvili.github.io/aggregate-animation-data/designs/\n */\n\nimport { CONF } from \"./config\";\nimport { getGridSpec } from \"./layout\";\n\n/**\n * Generates a spec for count animation\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {Object} shrink if truthy, circles will be pulled up\n * @returns a vega lite spec\n */\nexport const getCountStep = (source, target, shrink = false) => {\n const { width, height } = target.spec || target;\n let values = source.data.values.slice();\n const sourceMeta = source.meta;\n\n // generate rules layer\n const rules = sourceMeta.rules.map((d, i) => {\n const n = sourceMeta.rules.length;\n return {\n transform: [{ filter: d.filter }],\n name: `rule-${i + 1}`,\n mark: {\n type: \"rule\",\n x: { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: \"count\",\n // axis: null,\n },\n },\n };\n });\n\n if (shrink) {\n values = values.map((d, i) => {\n const y = target.data.values[i][CONF.Y_FIELD];\n return {\n ...d,\n [CONF.Y_FIELD]: y,\n };\n });\n }\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: source.encoding,\n },\n ...rules,\n ],\n };\n};\n\n/**\n * Generates a spec for median and quantile animations\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {Number} step step counter. null is the last step\n * @param {Number} p a percentile\n * @returns a vega lite spec\n */\nexport const getMedianStep = (source, target, step = 0, p = 0.5) => {\n const all_groups = [];\n const { width, height } = target.spec || target;\n const isLast = step === null;\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n const values = [];\n\n const reduce = (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n\n let sorted = data\n .slice()\n .sort((a, b) => {\n const sortFn = hasFacet ? \"descending\" : \"ascending\";\n return d3[sortFn](a[CONF.Y_FIELD], b[CONF.Y_FIELD]);\n })\n .map((d, i) => {\n return {\n ...d,\n rank: i + 1,\n };\n });\n\n // inspired by median animation https://uwdata.github.io/gemini2-editor/ \n const y_median = d3.quantile(sorted, p, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const y_median_pos = hasFacet ? data[0].scaleY(y_median) : y_median;\n const median_rank = d3.quantile(sorted, 0.5, (d) => d.rank);\n const max_rank = d3.max(sorted, (d) => d.rank);\n const diff = isLast ? null : max_rank - median_rank - step;\n const dx = hasFacet ? 5 : 0.1;\n\n sorted = sorted.map((d) => {\n const rank_delta_abs = Math.abs(d.rank - median_rank);\n const y_delta = (hasFacet ? d.oldY : d[CONF.Y_FIELD]) - y_median;\n const bisection =\n diff !== null && rank_delta_abs <= diff ? 0 : y_delta > 0 ? 1 : -1;\n\n let newField = null;\n\n if (bisection === -1) {\n newField = d[CONF.X_FIELD] - dx;\n } else if (bisection === 1) {\n newField = d[CONF.X_FIELD] + dx;\n } else {\n newField = d[CONF.X_FIELD];\n }\n\n return {\n ...d,\n bisection,\n [CONF.X_FIELD + \"_pos\"]: newField,\n y_median,\n y_median_pos,\n };\n });\n\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue} && datum.bisection === 0`;\n let groupFilter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupFilter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupFilter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupFilter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupFilter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n all_groups.push({\n filter,\n groupFilter,\n groupValue,\n groupKey: CONF.X_FIELD,\n median: y_median,\n groupId,\n median_pos: y_median_pos,\n rankDiff: Math.abs(max_rank - median_rank),\n rule_start: d3.min(sorted, (d) => d[CONF.X_FIELD + \"_pos\"]) + 1,\n rule_end: d3.max(sorted, (d) => d[CONF.X_FIELD + \"_pos\"]) - 1,\n });\n\n values.push(...sorted);\n };\n\n const groupKeys = [CONF.X_FIELD];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n d3.rollup(\n source.data.values.slice(),\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = [];\n\n let ruleField = isLast ? \"y_median\" : CONF.Y_FIELD;\n\n if (hasFacet) {\n ruleField = isLast ? \"y_median_pos\" : CONF.Y_FIELD;\n }\n\n all_groups.forEach((d, i) => {\n const n = all_groups.length;\n\n const top_rule = {\n transform: isLast ? [{ filter: d.groupFilter }] : [{ filter: d.filter }],\n name: `top_rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? d.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: ruleField,\n type: \"quantitative\",\n aggregate: \"max\",\n axis: null,\n },\n },\n };\n\n const bottom_rule = {\n transform: isLast ? [{ filter: d.groupFilter }] : [{ filter: d.filter }],\n name: `bottom_rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? d.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: ruleField,\n type: \"quantitative\",\n aggregate: \"min\",\n axis: null,\n },\n },\n };\n\n rules.push(top_rule, bottom_rule);\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n x: {\n ...source.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n color: source.encoding.color\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Generates a spec for mean animation\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @returns a vega lite spec\n */\nexport const getMeanStep = (source, target) => {\n const all_groups = [];\n const { width, height } = target.spec || target;\n const domain = source.encoding.y.scale.domain;\n\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n\n const values = [];\n\n const reduce = (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n\n let sorted = data\n .slice()\n .sort((a, b) => {\n const sortFn = hasFacet ? \"descending\" : \"ascending\";\n return d3[sortFn](a[CONF.Y_FIELD], b[CONF.Y_FIELD]);\n })\n .map((d, i) => {\n return {\n ...d,\n rank: i + 1,\n };\n });\n\n const y_mean = d3.mean(sorted, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const y_mean_pos = hasFacet ? data[0].scaleY(y_mean) : y_mean;\n const mean_rank = d3.mean(sorted, (d) => d.rank);\n const max_rank = d3.max(sorted, (d) => d.rank);\n const dividor = max_rank * 1.4;\n const multiplier = hasFacet ? 25 : 1;\n\n sorted = sorted.map((d) => {\n const rankRatio_from_mean = (d.rank - mean_rank) / dividor;\n\n const rankRatio_from_mean_start = (d.rank - 0.5 - mean_rank) / dividor;\n const rankRatio_from_mean_end = (d.rank + 0.5 - mean_rank) / dividor;\n\n return {\n ...d,\n [CONF.X_FIELD + \"_pos\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean * multiplier,\n [CONF.X_FIELD + \"_pos_start\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean_start * multiplier,\n [CONF.X_FIELD + \"_pos_end\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean_end * multiplier,\n y_mean,\n y_mean_pos,\n };\n });\n\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n all_groups.push({\n filter,\n groupValue,\n groupKey: CONF.X_FIELD,\n groupId: groupId,\n mean: y_mean,\n mean_pos: y_mean_pos,\n rule_start: d3.min(sorted, (d) => d[CONF.X_FIELD + \"_pos_start\"]),\n rule_end: d3.max(sorted, (d) => d[CONF.X_FIELD + \"_pos_end\"]),\n });\n\n values.push(...sorted);\n\n return sorted;\n };\n\n const groupKeys = [CONF.X_FIELD];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n d3.rollups(\n source.data.values.slice(),\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = [];\n\n all_groups.forEach((d, i) => {\n const n = all_groups.length;\n\n const rule = {\n transform: [{ filter: d.filter }],\n name: `rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : {\n expr: `${i + 1} * (width / ${n + 1}) - (width / ${n + 1}) * 0.35`,\n },\n x2: hasFacet\n ? d.rule_end\n : {\n expr: `${i + 1} * (width / ${n + 1}) + (width / ${n + 1}) * 0.35`,\n },\n },\n encoding: {\n y: {\n field: hasFacet ? \"y_mean_pos\" : CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: \"mean\",\n axis: null,\n scale: { domain },\n },\n },\n };\n\n rules.push(rule);\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n x: {\n ...source.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Generates a spec for min and max animations\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {String} minOrMax \"min\" or \"max\"\n * @returns a vega lite spec\n */\nexport const getMinMaxStep = (source, target, minOrMax = \"min\") => {\n const { width, height } = target.spec || target;\n const aggrFn = minOrMax === \"min\" ? d3.min : d3.max;\n const domain = source.encoding.y.scale.domain;\n const groupKeys = [CONF.X_FIELD];\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n\n const values = [];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n const all_groups = [];\n\n d3.rollup(\n source.data.values.slice(),\n (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n const aggr = aggrFn(data, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const aggr_pos = hasFacet ? data[0].scaleY(aggr) : aggr;\n\n all_groups.push({\n filter,\n groupValue,\n groupKey: CONF.X_FIELD,\n aggr,\n aggr_pos,\n groupId,\n rule_start: d3.min(data, (d) => d[CONF.X_FIELD] - 2),\n rule_end: d3.max(data, (d) => d[CONF.X_FIELD] + 2),\n });\n\n const g = data.find((d) => {\n const v = hasFacet ? d.oldY : d[CONF.Y_FIELD];\n return v === aggr;\n });\n\n values.push(\n ...data.map((d) => {\n const isAggr = g && g.gemini_id === d.gemini_id;\n\n return {\n ...d,\n isAggr,\n aggr_pos,\n };\n })\n );\n },\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = all_groups.map((group, i) => {\n const n = all_groups.length;\n return {\n transform: [{ filter: group.filter }],\n name: `rule_${group.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? group.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? group.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: hasFacet ? \"aggr_pos\" : CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: minOrMax,\n axis: null,\n scale: { domain },\n },\n },\n };\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values: values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Configuration for custom animations.\n * When meta.custom_animation is present, \n * it looks up a function here and generates custom animation specifications\n */\nexport const CustomAnimations = {\n /**\n * steps:\n * 1) stack sets\n * 2) put rules (lines) using aggregate count\n * 3) replace with count bubbles (aggregate count) (basically target spec)\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n count: async (rawSource, target) => {\n const stacks = await getGridSpec(rawSource, 10, true);\n delete stacks.encoding.y.axis;\n const rules = getCountStep(rawSource, target, false);\n const pullUp = getCountStep(rawSource, target, true);\n return [stacks, rules, pullUp, target];\n },\n /**\n * min animation steps:\n * 1) source spec\n * 2) stack sets, with a rule line at min circle\n * 3) pull circles down\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n min: (rawSource, target) => {\n const step_1 = getMinMaxStep(rawSource, target, \"min\");\n\n const step_2 = {\n ...step_1,\n transform: [{ filter: \"datum.isAggr === true\" }],\n layer: [\n {\n ...step_1.layer[0],\n encoding: {\n ...step_1.layer[0].encoding,\n y: {\n ...step_1.layer[0].encoding.y,\n aggregate: \"min\",\n },\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n\n return [rawSource, step_1, step_2, target];\n },\n /**\n * max animation steps:\n * 1) source spec\n * 2) stack sets, with a rule line at max circle\n * 3) pull circles up\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n max: (rawSource, target, source) => {\n const step_1 = getMinMaxStep(rawSource, target, \"max\");\n\n const step_2 = {\n ...step_1,\n transform: [{ filter: \"datum.isAggr === true\" }],\n layer: [\n {\n ...step_1.layer[0],\n encoding: {\n ...step_1.layer[0].encoding,\n y: {\n ...step_1.layer[0].encoding.y,\n aggregate: \"max\",\n },\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n\n return [rawSource, step_1, step_2, target];\n },\n /**\n * mean animation steps:\n * 1) source spec\n * 2) intermediate: circles will be placed diagonally \"/\" \n * 3) add lines (rules) at mean level\n * 4) convert circles to small ticks\n * 5) show vertical lines\n * 6) collapse the lines to mean level\n * 7) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n mean: (rawSource, target) => {\n const step_1 = getMeanStep(rawSource, target);\n\n const barWidth = 2;\n\n const step_2 = {\n ...step_1,\n layer: [\n {\n name: \"main\",\n mark: { type: \"tick\", orient: \"horizontal\", width: barWidth },\n encoding: {\n y: {\n ...rawSource.encoding.y,\n },\n x: {\n ...rawSource.encoding.x,\n field: CONF.X_FIELD + \"_pos_start\",\n },\n x2: {\n field: CONF.X_FIELD + \"_pos_end\",\n },\n color: rawSource.encoding.color\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n const step_3 = {\n ...step_2,\n layer: [\n {\n ...step_2.layer[0],\n mark: {\n type: \"bar\",\n width: barWidth,\n },\n encoding: {\n ...step_2.layer[0].encoding,\n y2: {\n field: \"y_mean_pos\",\n },\n },\n },\n ...step_2.layer.slice(1),\n ],\n };\n const step_4 = {\n ...step_2,\n layer: [\n {\n ...step_2.layer[0],\n mark: {\n type: \"bar\",\n width: barWidth,\n },\n encoding: {\n ...step_2.layer[0].encoding,\n y: {\n ...step_2.layer[0].encoding.y,\n field: \"y_mean_pos\",\n },\n y2: {\n field: \"y_mean_pos\",\n },\n },\n },\n ...step_2.layer.slice(1),\n ],\n };\n\n const intermediate = {\n ...rawSource,\n data: {\n values: step_1.data.values,\n },\n encoding: {\n ...rawSource.encoding,\n x: {\n ...rawSource.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n },\n };\n\n return [rawSource, intermediate, step_1, step_2, step_3, step_4, target];\n },\n /**\n * median and quantile animation steps:\n * 1) source spec\n * 2) show rules at the top and bottom\n * 3) split circles by median and move to the right and left and move rules to median level\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n median: (rawSource, target, calculatedSource, p) => {\n const percent = (p === undefined || p === null) ? 0.5 : p;\n const initial = getMedianStep(rawSource, target, 0, percent);\n const last_with_points = getMedianStep(rawSource, target, null, percent);\n\n return [\n rawSource,\n initial,\n last_with_points,\n target\n ];\n },\n};\n","/**\n * Hack faceted view since gemini.js does not support multi view animations\n * Finding coordinates of each circle and treat them as real values in the one axis view \n * Adding axis layer underneath to look exactly same as faceted view\n */\n\nimport { CONF, META_PARSE_VALUES } from \"./config\";\n\n/**\n * Get empty spec, if no data is present\n * @param {Object} spec \n * @returns vega-lite spec\n */\nexport function getEmptySpec(spec) {\n const description = spec.meta.description;\n const splitField = spec.meta.splitField;\n\n return {\n $scheme: CONF.SCHEME,\n width: 300,\n height: 300,\n meta: {\n description,\n axes: false,\n },\n data: {\n values: [\n {\n [CONF.X_FIELD]: 0,\n [CONF.Y_FIELD]: 0,\n },\n ],\n },\n mark: {\n type: \"point\",\n filled: true,\n strokeWidth: 1,\n color: \"transparent\",\n },\n encoding: {\n x: {\n field: CONF.X_FIELD,\n type: \"quantitative\",\n scale: {\n domain: [-5, 5],\n },\n axis: {\n grid: false,\n ticks: false,\n title: splitField,\n domain: false,\n values: [],\n },\n },\n y: {\n field: CONF.Y_FIELD,\n type: \"quantitative\",\n scale: {\n domain: [-5, 5],\n },\n axis: {\n grid: false,\n ticks: false,\n title: null,\n domain: false,\n values: [],\n },\n },\n },\n };\n}\n\n/**\n * Creates and returns a template for vega spec\n * @param {Number} width spec width\n * @param {Number} height spec height\n * @param {Object} axes which axes to add\n * @param {Object} spec original spec\n * @returns vega-lite spec\n */\nexport function getSpecTemplate(width, height, axes = { x: true, y: true }, spec) {\n const encoding = spec.spec.encoding;\n const mark = spec.spec.mark;\n const facet = spec.facet;\n\n if (encoding.x) {\n const title = facet && facet.column ? facet.column.title : null;\n\n encoding.x = {\n field: CONF.X_FIELD,\n type: \"quantitative\",\n scale: {},\n axis: axes.x\n ? {\n labelExpr: \"\",\n values: [],\n title: title,\n grid: false,\n orient: \"top\",\n ticks: false,\n domain: false,\n labelPadding: 10,\n }\n : null,\n };\n }\n\n if (encoding.y) {\n const title = facet && facet.row ? facet.row.title : null;\n\n encoding.y = {\n field: spec.spec.mark === \"errorbar\" ? encoding.y.field : CONF.Y_FIELD,\n type: \"quantitative\",\n scale: {},\n axis: axes.y\n ? {\n labelExpr: \"\",\n values: [],\n title: title,\n grid: false,\n labelAngle: 90,\n domain: false,\n ticks: false,\n labelPadding: 10,\n orient: \"right\",\n }\n : null,\n };\n }\n\n const additionals = {};\n\n if (spec.transform) {\n additionals.transform = spec.transform;\n }\n\n return {\n $schema: CONF.SCHEME,\n data: {\n values: [],\n },\n width: width,\n height: height,\n mark: mark,\n encoding: encoding,\n ...additionals,\n };\n}\n\n/**\n * Get hacked spec\n * Finding coordinates of each circle and treat them as real values in the one axis view \n * Adding axis layer underneath to look exactly same as faceted view\n * @param {Object} param0 parameters\n * @param {Object} param0.view a vega view instance\n * @param {Object} param0.spec a vega spec\n * @param {Object} param0.width spec width\n * @param {Object} param0.height spec height\n * @returns vega-lite spec\n */\nexport function getHackedSpec({ view, spec, width = 600, height = 600 }) {\n const rowId = spec.facet.row ? spec.facet.row.field : null;\n const colId = spec.facet.column ? spec.facet.column.field : null;\n\n const newSpec = getSpecTemplate(\n width,\n height,\n {\n x: colId,\n y: rowId,\n },\n spec\n );\n\n const yDomain = [height, 0];\n const xDomain = [0, width];\n\n const values = [];\n\n const colMap = new Map();\n const rowMap = new Map();\n\n const scaleX = view.scale(\"x\");\n const scaleY = view.scale(\"y\");\n const source = view.data(\"source\");\n\n let row_header, column_header;\n\n // y axis\n if (rowId && (row_header = view.data(\"row_header\"))) {\n const yAxisValues = [];\n const yAxisExpr = {};\n\n row_header.forEach((d, i) => {\n const bounds = d.bounds;\n const name = d.datum[rowId];\n const y1 = bounds.y1;\n const y2 = bounds.y2;\n\n rowMap.set(name, y1);\n\n const yCoord = Math.round(y1 + (y2 - y1) / 2);\n\n yAxisValues.push(yCoord);\n yAxisExpr[yCoord] = name;\n });\n\n yDomain[1] = d3.min(row_header, (d) => d.bounds.y1);\n yDomain[0] = d3.max(row_header, (d) => d.bounds.y2);\n\n newSpec.encoding.y.axis.values = yAxisValues;\n newSpec.encoding.y.axis.labelExpr = `${JSON.stringify(\n yAxisExpr\n )}[datum.label]`;\n }\n\n // x axis\n if (colId && (column_header = view.data(\"column_header\"))) {\n const xAxisValues = [];\n const xAxisExpr = {};\n\n column_header.forEach((d, i) => {\n const bounds = d.bounds;\n\n const name = d.datum[colId];\n colMap.set(name, bounds.x1);\n\n const xCoord = Math.round(bounds.x1 + (bounds.x2 - bounds.x1) / 2);\n\n xAxisValues.push(xCoord);\n xAxisExpr[xCoord] = name;\n });\n\n xDomain[0] = d3.min(column_header, (d) => d.bounds.x1);\n xDomain[1] = d3.max(column_header, (d) => d.bounds.x2);\n\n newSpec.encoding.x.axis.values = xAxisValues;\n newSpec.encoding.x.axis.labelExpr = `${JSON.stringify(\n xAxisExpr\n )}[datum.label]`;\n }\n\n // generating data.values\n source.forEach((d) => {\n const col = d[colId];\n const row = d[rowId];\n\n const xStart = colMap.get(col) || 0;\n const yStart = rowMap.get(row) || 0;\n\n const xField = spec.meta.parse === META_PARSE_VALUES.jitter ? \"x\" : CONF.X_FIELD;\n const yField = spec.meta.parse === META_PARSE_VALUES.jitter ? \"y\" : CONF.Y_FIELD;\n\n const xCoord = xStart + scaleX(d[xField]);\n\n values.push({\n ...d,\n [CONF.X_FIELD]: xCoord,\n [CONF.Y_FIELD]: yStart + scaleY(d[yField]),\n [CONF.X_FIELD + \"_num\"]: d.scaledX ? xStart + scaleX(d.scaledX) : xCoord,\n scaleX: (val) => yStart + scaleX(val),\n scaleY: (val) => yStart + scaleY(val),\n });\n });\n\n newSpec.encoding.x.scale.domain = xDomain;\n newSpec.encoding.y.scale.domain = yDomain;\n newSpec.data.values = values;\n newSpec.width = xDomain[1] - xDomain[0];\n newSpec.height = yDomain[0] - yDomain[1];\n\n return newSpec;\n}\n\n/**\n * turns faceted spec to regular spec, using hacking technique\n * @param {Object} spec vega lite spec with facets\n * @returns vega-lite spec\n */\nexport function hackFacet(spec) {\n const div = document.createElement(\"div\");\n\n spec.data.name = \"source\";\n\n return vegaEmbed(div, spec, { renderer: \"svg\" }).then((resp) => {\n const newSpec = getHackedSpec({\n ...resp,\n width: spec.spec.width,\n height: spec.spec.height,\n });\n\n if (spec.config) {\n newSpec.config = spec.config;\n }\n\n if (spec.meta) {\n newSpec.meta = spec.meta;\n }\n\n let [transformX, transformY] = resp.view._origin;\n\n if (!(spec.facet && spec.facet.row && !spec.facet.column)) {\n transformY = 0;\n }\n\n if (newSpec.meta) {\n newSpec.meta.transformX = transformX;\n newSpec.meta.transformY = transformY;\n } else {\n newSpec.meta = { transformX, transformY };\n }\n\n return newSpec;\n });\n}\n","/**\n * Entry point of Datamations JavaScript code\n * Reads vega-lite specifications, converts to vega specs and animates them\n *\n * ### Dependencies:\n * - gemini: https://github.com/uwdata/gemini\n * - vega-lite: https://vega.github.io/vega-lite/\n * - vega: https://vega.github.io/vega/\n * - vega-embed: https://github.com/vega/vega-embed\n * - d3: https://d3js.org/\n * - gifshot: https://github.com/yahoo/gifshot\n * - html2canvas: https://html2canvas.hertzen.com/\n * - download2: http://danml.com/download.html\n */\n\nimport { CONF, META_PARSE_VALUES } from \"./config\";\nimport { getSelectors, splitLayers, getRows } from \"./utils\";\nimport { hackFacet, getEmptySpec } from \"./hack-facet-view\";\nimport { getGridSpec, getJitterSpec } from \"./layout\";\nimport { CustomAnimations } from \"./custom-animations\";\n\n/**\n *\n * @param {String} id conteiner id\n * @param {Object} param1 configuration object\n * @param {Array} param1.specs list of vega-lite specifications\n * @param {Boolean} param1.autoPlay autoPlay\n * @param {Number} param1.frameDel frame duration (in ms.)\n * @param {Number} param1.frameDel delay between frames (in ms.)\n * @returns an object of exposed functions\n */\nexport default function App(id, { specs, autoPlay = false, frameDur, frameDel }) {\n let rawSpecsImmutable; // saving passed specs here, not changed by reference\n let rawSpecs; // holds raw vega-lite specs, not transformed\n let vegaLiteSpecs;\n let vegaSpecs; // vega specs\n let frames;\n let metas;\n let frameIndex = 0;\n let timeoutId;\n let playing = false;\n let initializing = false;\n let frameDuration = frameDur || 2000;\n let frameDelay = frameDel || 1000;\n\n // a fallback gemini spec in case gemini.animate could not recommend anything\n const gemSpec = {\n timeline: {\n concat: [\n {\n sync: [\n {\n component: {\n mark: \"marks\",\n },\n change: {\n data: {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: false,\n },\n encode: {\n update: true,\n enter: true,\n exit: true,\n },\n },\n timing: {\n duration: {\n ratio: 1,\n },\n },\n },\n ],\n },\n ],\n },\n totalDuration: frameDuration,\n };\n\n /**\n * Resets all the instance variables to be able to re-run animation\n */\n const reset = () => {\n vegaLiteSpecs = [];\n vegaSpecs = [];\n rawSpecs = [];\n rawSpecsImmutable = [];\n frames = [];\n metas = [];\n frameIndex = 0;\n playing = false;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n /**\n * Initializes datamation app\n */\n async function init() {\n // ignore all subsequent init calls.\n if (initializing) return;\n initializing = true;\n\n const { slider } = getSelectors(id);\n\n reset();\n\n // load or set data\n if (specs) {\n vegaLiteSpecs = JSON.parse(JSON.stringify(specs));\n }\n\n // save raw specs to use for facet axes drawing\n vegaLiteSpecs.forEach((d) => {\n rawSpecs.push(JSON.parse(JSON.stringify(d)));\n rawSpecsImmutable.push(JSON.parse(JSON.stringify(d)));\n\n if (d.meta) {\n metas.push(d.meta);\n }\n });\n\n d3.select(slider).property(\"max\", vegaLiteSpecs.length - 1);\n\n // parse, jitter, layer splitting\n await transformSpecs();\n\n // compile to vega\n toVegaSpecs();\n\n // create frames for animation\n await makeFrames();\n\n drawSpec(0);\n\n if (autoPlay) {\n setTimeout(play, 100);\n }\n\n initializing = false;\n }\n\n /**\n * Plays animation\n */\n function play(cb = () => {}) {\n playing = true;\n frameIndex = 0;\n\n const tick = () => {\n animateFrame(frameIndex, cb).then(() => {\n if (playing) {\n frameIndex++; // next frame\n\n if (frames[frameIndex]) {\n tick();\n } else {\n playing = false;\n disableEnable(\"enable\");\n }\n }\n });\n\n if (typeof HTMLWidgets !== \"undefined\" && HTMLWidgets.shinyMode) {\n var prevIndex = frameIndex - 1;\n Shiny.onInputChange(\"slider_state\", prevIndex);\n }\n };\n\n disableEnable(\"disable\");\n tick();\n }\n\n /**\n * Draws vega lite spec statically (without transition), also updates slider, description, show/hides some layers\n * @param {Number} index specification index in vegaLiteSpecs\n * @param {Object} vegaSpec source vega spec of current frame\n * @returns a promise of vegaEmbed\n */\n function drawSpec(index, vegaSpec) {\n let spec = vegaLiteSpecs[index];\n\n if (!spec) return;\n\n if (spec.custom) {\n spec = gemini.vl2vg4gemini(spec.sequence[spec.sequence.length - 1]);\n }\n\n const meta = metas[index];\n\n const {\n axisSelector,\n visSelector,\n descr,\n slider,\n otherLayers,\n controls,\n exportWrap,\n } = getSelectors(id);\n\n d3.select(slider).property(\"value\", index);\n d3.select(descr).html(meta.description || \"frame \" + index);\n d3.select(axisSelector)\n .style(\"opacity\", meta.axes ? 1 : 0)\n .html(\"\");\n d3.select(visSelector).classed(\"with-axes\", meta.axes);\n d3.select(otherLayers).classed(\"with-axes\", meta.axes);\n\n // draw axis\n if (meta.axes) {\n drawAxis(index);\n }\n\n const transformX = meta.transformX || 0;\n const transformY = meta.transformY || 0;\n\n // shift vis\n d3.select(visSelector)\n .style(\"left\", transformX + \"px\")\n .style(\"top\", transformY + \"px\");\n\n const _width = spec.width + transformX + 10;\n d3.select(controls).style(\"width\", _width + \"px\");\n d3.select(descr).style(\"width\", _width + \"px\");\n\n // draw vis\n return drawChart(spec, vegaSpec && vegaSpec.custom ? null : vegaSpec);\n }\n\n /**\n * Draws a chart, either spec or vegaSpec (which is passed from animate function)\n * Supports single view as well as multiple view chart\n * @param {Object} spec vega-lite spec\n * @param {Object} vegaSpec source vega spec of current frame\n * @returns a promise of vegaEmbed\n */\n function drawChart(spec, vegaSpec) {\n const { visSelector, otherLayers } = getSelectors(id);\n const layers = document.querySelector(otherLayers);\n layers.innerHTML = \"\";\n\n if (Array.isArray(spec)) {\n return new Promise((res) => {\n spec.forEach((s, i) => {\n let target,\n embedSpec = s;\n\n if (s.meta.animated) {\n target = visSelector;\n if (vegaSpec) {\n embedSpec = vegaSpec;\n }\n } else {\n const div = document.createElement(\"div\");\n div.classList.add(\"vega-hidden-layer\");\n layers.appendChild(div);\n target = div;\n }\n\n vegaEmbed(target, embedSpec, { renderer: \"svg\" }).then(() => {\n if (i === spec.length - 1) {\n res();\n }\n\n // ensure facet translations match in axisSelector and otherLayers\n setTimeout(() => {\n adjustAxisAndErrorbars();\n }, 100);\n });\n });\n });\n } else {\n return vegaEmbed(visSelector, vegaSpec || spec, { renderer: \"svg\" });\n }\n }\n\n /**\n * Fixes hacked axis spec and error bar alignment\n */\n function adjustAxisAndErrorbars() {\n const { axisSelector, otherLayers } = getSelectors(id);\n const axisCells = d3\n .select(axisSelector)\n .selectAll(\".mark-group.cell>g\")\n .nodes();\n const otherLayersCells = d3\n .select(otherLayers)\n .selectAll(\".mark-group.cell>g\")\n .nodes();\n\n if (axisCells.length === otherLayersCells.length) {\n for (let i = 0; i < axisCells.length; i++) {\n const transform = axisCells[i].getAttribute(\"transform\");\n otherLayersCells[i].setAttribute(\"transform\", transform);\n }\n }\n }\n\n /**\n * Draws an axis layer. This is called when meta.axes = true.\n * @param {Number} index specification index in vegaLiteSpecs\n * @returns a promise of vegaEmbed\n */\n function drawAxis(index) {\n let spec = rawSpecs[index];\n\n if (spec.spec && spec.spec.layer) {\n const split = splitLayers(spec);\n spec = split[1];\n }\n\n const columnFacet = spec.facet && spec.facet.column;\n const { axisSelector, controls, descr, otherLayers } = getSelectors(id);\n\n // update axis domain to matched hacked facet view\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n\n if (!encoding.y.scale) {\n const extentY = d3.extent(spec.data.values, (d) => d[CONF.Y_FIELD]);\n encoding.y.scale = { domain: extentY };\n }\n\n if (encoding.color) {\n encoding.color.legend = null;\n }\n\n if (encoding.fill) {\n encoding.fill.legend = null;\n }\n\n if (encoding.x && encoding.x.axis) {\n encoding.x.axis.labelAngle = -90;\n encoding.x.axis.titleOpacity = 0;\n }\n\n return vegaEmbed(axisSelector, spec, { renderer: \"svg\" }).then(() => {\n if (columnFacet && columnFacet.title) {\n const fn = function () {\n const transform = d3.select(this).attr(\"transform\");\n const x = transform.split(\"(\")[1].split(\",\")[0];\n return `translate(${x}, 40)`;\n };\n\n d3.select(axisSelector + \" svg > g\").attr(\"transform\", fn);\n d3.select(otherLayers + \" svg > g\").attr(\"transform\", fn);\n }\n const width = d3\n .select(axisSelector)\n .node()\n .getBoundingClientRect().width;\n d3.select(controls).style(\"width\", width + \"px\");\n d3.select(descr).style(\"width\", width + \"px\");\n });\n }\n\n /**\n * Animates a frame, from source to target vega specification using gemini\n * @param {Number} index specification index in vegaLiteSpecs\n * @param {Function} cb callback function of each frame drawal\n * @returns a promise of gemini.animate\n */\n async function animateFrame(index, cb) {\n if (!frames[index]) return;\n\n console.log(\"animating frame\", index);\n\n const { axisSelector, visSelector, otherLayers, descr, slider, controls } =\n getSelectors(id);\n\n let { source, target, gemSpec, prevMeta, currMeta } = frames[index];\n let anim = null;\n\n if (source.custom) {\n const _source_spec = gemini.vl2vg4gemini(\n source.sequence[source.sequence.length - 1]\n );\n anim = await gemini.animate(_source_spec, target, gemSpec);\n } else if (target.custom) {\n anim = await gemini.animateSequence(target.sequence, gemSpec);\n } else {\n anim = await gemini.animate(source, target, gemSpec);\n }\n\n let currHasAxes = currMeta.axes;\n let width = target.width;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n // initial frame\n if (index === 0 && cb) cb(0);\n\n return new Promise((res) => {\n drawSpec(index, source).then(() => {\n timeoutId = setTimeout(() => {\n d3.select(descr).html(currMeta.description);\n anim.play(visSelector).then(() => {\n d3.select(slider).property(\"value\", index + 1);\n cb && cb(index + 1);\n res();\n });\n\n const transformX = currMeta.transformX || 0;\n const transformY = currMeta.transformY || 0;\n\n d3.select(visSelector)\n .transition()\n .duration(750)\n .style(\"left\", transformX + \"px\")\n .style(\"top\", transformY + \"px\");\n\n // show/hide axis vega chart\n if (currHasAxes) {\n drawAxis(index + 1);\n d3.select(axisSelector)\n .transition()\n .duration(1000)\n .style(\"opacity\", 1);\n d3.select(visSelector).classed(\"with-axes\", true);\n d3.select(otherLayers).classed(\"with-axes\", true);\n } else {\n d3.select(axisSelector)\n .transition()\n .duration(1000)\n .style(\"opacity\", 0);\n d3.select(visSelector).classed(\"with-axes\", false);\n d3.select(otherLayers).classed(\"with-axes\", false);\n d3.select(controls).style(\"width\", width + transformX + 10 + \"px\");\n d3.select(descr).style(\"width\", width + transformX + 10 + \"px\");\n }\n\n const nextSpec = vegaLiteSpecs[index + 1];\n\n if (nextSpec && Array.isArray(nextSpec)) {\n const statics = nextSpec.filter((d) => !d.meta.animated);\n\n d3.select(otherLayers)\n .html(\"\")\n .style(\"opacity\", 0)\n .transition()\n // .delay(frameDuration / 3)\n .duration(frameDuration / 2)\n .style(\"opacity\", 1);\n\n statics.forEach((s) => {\n const div = document.createElement(\"div\");\n div.classList.add(\"vega-hidden-layer\");\n vegaEmbed(div, s, { renderer: \"svg\" }).then(() => {\n adjustAxisAndErrorbars();\n });\n document.querySelector(otherLayers).appendChild(div);\n });\n } \n }, \n // removed delay between frames for custom animations\n target.custom ? 0 : frameDelay);\n });\n });\n }\n\n /**\n * Transforms specifications into proper format:\n * - meta.grid = generates infogrid\n * - meta.jitter = jitters data using d3.forceCollide\n * - meta.custom_animation = handles custom animation type\n * - spec.layer = splits layers to stack on top on each other\n */\n async function transformSpecs() {\n const rows = getRows(vegaLiteSpecs);\n\n for (let i = 0; i < vegaLiteSpecs.length; i++) {\n let vlSpec = vegaLiteSpecs[i];\n\n if (Array.isArray(vlSpec)) continue; // just sanity check, making sure that it is not an array\n\n // if filter has empty `oneOf`, then generate empty spec and avoid any further processing\n if (\n vlSpec.transform &&\n vlSpec.transform[0].filter &&\n vlSpec.transform[0].filter.oneOf &&\n vlSpec.transform[0].filter.oneOf.length === 0\n ) {\n const emptySpec = getEmptySpec(vlSpec);\n\n metas[i] = emptySpec.meta;\n rawSpecs[i] = emptySpec;\n vlSpec = emptySpec;\n vegaLiteSpecs[i] = emptySpec;\n continue;\n }\n\n const meta = vlSpec.meta;\n const parse = meta.parse;\n\n // parsing\n\n if (meta.custom_animation) {\n let funName = meta.custom_animation;\n let p = null;\n\n // handle quantile\n if (\n Array.isArray(meta.custom_animation) &&\n meta.custom_animation[0] === \"quantile\"\n ) {\n p = meta.custom_animation[1];\n funName = \"median\";\n }\n\n let source = {\n ...rawSpecs[i - 1],\n data: rawSpecsImmutable[i - 1].data,\n };\n let target = vlSpec;\n\n if (rawSpecsImmutable[i - 1].facet) {\n source = {\n ...vegaLiteSpecs[i - 1],\n meta: {\n ...vegaLiteSpecs[i - 1].meta,\n hasFacet: true,\n columnFacet: rawSpecsImmutable[i - 1].facet.column,\n rowFacet: rawSpecsImmutable[i - 1].facet.row,\n },\n data: {\n values: vegaLiteSpecs[i - 1].data.values.map((d) => {\n return {\n ...d,\n [CONF.X_FIELD]: d[CONF.X_FIELD + \"_num\"],\n };\n }),\n },\n };\n }\n\n // if custom animations have facets, fake them before passing to CustomAnimation\n if (vegaLiteSpecs[i].facet) {\n const newSpecTarget = await hackFacet(vegaLiteSpecs[i]);\n vegaLiteSpecs[i] = newSpecTarget;\n target = newSpecTarget;\n }\n\n const fn = CustomAnimations[funName];\n\n if (fn) {\n const sequence = await fn(source, target, vegaLiteSpecs[i - 1], p);\n vegaLiteSpecs[i] = {\n custom: meta.custom_animation,\n sequence,\n };\n }\n } else if (parse === META_PARSE_VALUES.grid) {\n const gridSpec = await getGridSpec(vlSpec, rows);\n\n const enc = gridSpec.spec ? gridSpec.spec.encoding : gridSpec.encoding;\n rawSpecs[i].data.values = gridSpec.data.values;\n\n // update domain for raw spec axis layer\n if (rawSpecs[i].meta.axes && rawSpecs[i].meta.splitField) {\n const encoding = rawSpecs[i].spec\n ? rawSpecs[i].spec.encoding\n : rawSpecs[i].encoding;\n\n encoding.x.axis = enc.x.axis;\n encoding.y.scale = {\n domain: enc.y.scale.domain,\n };\n encoding.x.scale = {\n domain: enc.x.scale.domain,\n };\n }\n\n vegaLiteSpecs[i] = gridSpec;\n } \n else if (parse === META_PARSE_VALUES.jitter) {\n vegaLiteSpecs[i] = await getJitterSpec(vlSpec);\n } \n // since gemini does not support multiple multiple axis transitions, \n // we must split the layers and draw as separate vega spec\n else if (vlSpec.layer || (vlSpec.spec && vlSpec.spec.layer)) {\n const arr = splitLayers(vlSpec);\n\n vegaLiteSpecs[i] = [];\n\n for (let j = 0; j < arr.length; j++) {\n const s = arr[j];\n\n // fake facets\n if (s.facet && s.spec && s.meta.animated) {\n const newSpec = await hackFacet(s);\n vegaLiteSpecs[i].push(newSpec);\n metas[i] = newSpec.meta;\n } else {\n vegaLiteSpecs[i].push(s);\n }\n }\n }\n\n if (vegaLiteSpecs[i]) {\n const facet = vegaLiteSpecs[i].facet;\n const spec = vegaLiteSpecs[i].spec;\n\n // fake facets\n if (facet && spec) {\n const newSpec = await hackFacet(vegaLiteSpecs[i]);\n vegaLiteSpecs[i] = newSpec;\n }\n }\n }\n\n console.log(\"parsed specs:\", vegaLiteSpecs);\n }\n\n /**\n * Converts vega-lite specs to vega specs using vl2vg4gemini (https://github.com/uwdata/gemini#vl2vg4gemini)\n */\n function toVegaSpecs() {\n vegaSpecs = vegaLiteSpecs.map((d) => {\n if (d.custom) {\n return d;\n }\n\n const s = Array.isArray(d) ? d.find((d) => d.meta.animated) : d;\n return gemini.vl2vg4gemini(s);\n });\n }\n\n /**\n * Generates animation frames\n * @returns array of objects of \\{ source, target, gemSpec, prevMeta, currMeta \\}\n */\n async function makeFrames() {\n const options = {\n stageN: 1,\n\n scales: {\n x: {\n domainDimension: \"diff\",\n },\n y: {\n domainDimension: \"diff\",\n },\n },\n\n marks: {\n marks: {\n change: {\n scale: [\"x\", \"y\"],\n data: {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: true,\n },\n encode: {\n update: true,\n enter: true,\n exit: true,\n },\n },\n },\n },\n totalDuration: frameDuration,\n };\n\n for (let i = 1; i < vegaSpecs.length; i++) {\n const prev = vegaSpecs[i - 1];\n const curr = vegaSpecs[i];\n\n const prevMeta = metas[i - 1];\n const currMeta = metas[i];\n\n try {\n let resp = null;\n\n if (curr.custom) {\n resp = await gemini.recommendForSeq(curr.sequence, {\n ...options,\n stageN: curr.sequence.length - 1,\n totalDuration: frameDuration * 2,\n });\n\n const _gemSpec = resp[0].specs.map((d) => d.spec);\n\n // make sure to add gemini_id to data change.\n // gemini recommend does not add it by itself.\n _gemSpec.forEach((d) => {\n if (d.timeline.concat.length) {\n const first = d.timeline.concat[0].sync[0];\n if (first && first.change && first.change.data) {\n first.change.data = {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: true,\n };\n }\n }\n });\n\n frames.push({\n source: prev,\n target: curr,\n gemSpec: _gemSpec,\n prevMeta,\n currMeta,\n });\n } else {\n resp = await gemini.recommend(\n prev.custom\n ? gemini.vl2vg4gemini(prev.sequence[prev.sequence.length - 1])\n : prev,\n curr,\n options\n );\n\n const _gemSpec = resp[0] ? resp[0].spec : gemSpec;\n const sync = _gemSpec.timeline.concat[0].sync;\n\n if (!sync.some((d) => d.component === \"view\")) {\n sync.push({\n component: \"view\",\n change: {\n signal: [\"width\", \"height\"],\n },\n timing: {\n duration: {\n ratio: 1,\n },\n },\n });\n }\n\n frames.push({\n source: prev,\n target: curr,\n gemSpec: _gemSpec,\n prevMeta,\n currMeta,\n });\n }\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n /**\n * Slider on change callback\n */\n function onSlide() {\n playing = false;\n disableEnable(\"enable\");\n const { slider } = getSelectors(id);\n const index = document.querySelector(slider).value;\n drawSpec(index);\n }\n\n /**\n * Exports png files for each frame\n */\n function exportPNG() {\n const { exportWrap } = getSelectors(id);\n\n const pngs = [];\n\n const callback = (index) => {\n const done = index >= frames.length;\n\n html2canvas(document.querySelector(exportWrap)).then((canvas) => {\n pngs.push(canvas.toDataURL());\n\n if (done) {\n pngs.forEach((uri, i) => {\n var a = document.createElement(\"a\");\n a.href = uri;\n a.download = `frame-${i + 1}.png`;\n a.click();\n });\n }\n });\n };\n\n play(callback);\n }\n\n /**\n * Exports datamation as gif.\n * @param {Boolean} fromWeb truthy if it is called from webpage, falsy from command line tool\n * @returns either base64 string, or downloads .gif file\n */\n function exportGif(fromWeb) {\n const { exportWrap, exportBtn } = getSelectors(id);\n\n if (fromWeb) {\n loaderOnOff(true);\n disableEnable(\"disable\", { slider: true });\n }\n\n let intervalId,\n images = [];\n\n const startInterval = () => {\n if (intervalId) clearInterval(intervalId);\n\n intervalId = setInterval(() => {\n html2canvas(document.querySelector(exportWrap)).then((canvas) => {\n images.push(canvas.toDataURL());\n });\n }, 16.66666);\n };\n\n let maxWidth = 300;\n let maxHeight = 300;\n\n return new Promise((res) => {\n const callback = (index) => {\n const done = index >= frames.length;\n const bound = document\n .querySelector(exportWrap)\n .getBoundingClientRect();\n\n if (bound.width > maxWidth) maxWidth = bound.width;\n if (bound.height > maxHeight) maxHeight = bound.height;\n\n if (done) {\n intervalId && clearInterval(intervalId);\n\n setTimeout(() => {\n gifshot.createGIF(\n {\n images,\n gifWidth: maxWidth,\n gifHeight: maxHeight,\n frameDuration: 2.5,\n },\n function (obj) {\n if (fromWeb) {\n loaderOnOff(false);\n disableEnable(\"enable\", { slider: true });\n }\n\n if (!obj.error) {\n var image = obj.image;\n\n if (fromWeb) {\n download(image, \"animation.gif\", \"image/gif\");\n }\n res(image);\n } else {\n console.error(\"error creating gif\", obj.errorMsg);\n }\n }\n );\n }, 1000);\n } else {\n intervalId && clearInterval(intervalId);\n setTimeout(startInterval, frameDelay);\n }\n };\n\n play(callback);\n });\n }\n\n /**\n * Disables or enables some components\n * @param {String} cmd \"disable\" or \"enable\"\n * @param {Array} components array of components\n */\n function disableEnable(cmd, components) {\n const { replayBtn, exportBtn, slider } = getSelectors(id);\n const arr = [replayBtn, exportBtn];\n\n if (components && components.slider) {\n arr.push(slider);\n }\n\n arr.forEach((sel) => {\n const el = document.querySelector(sel);\n\n if (cmd == \"disable\") {\n el.setAttribute(\"disabled\", \"disabled\");\n } else {\n el.removeAttribute(\"disabled\");\n }\n });\n }\n\n /**\n * Download button icon adjustment\n * @param {Boolean} loading\n */\n function loaderOnOff(loading) {\n const { exportBtn } = getSelectors(id);\n let className = \"fas fa-download\";\n\n if (loading) {\n className = \"fas fa-spinner spin\";\n }\n\n d3.select(exportBtn).select(\"i\").attr(\"class\", className);\n }\n\n init();\n\n return {\n onSlide,\n play,\n exportPNG,\n exportGif,\n animateFrame,\n getFrames: () => frames,\n };\n}\n"],"names":["undefined"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","sources":["../../node_modules/core-js/index.js","../../node_modules/regenerator-runtime/runtime.js","../../scripts/config.js","../../scripts/utils.js","../../scripts/layout.js","../../scripts/custom-animations.js","../../scripts/hack-facet-view.js","../../scripts/app.js"],"sourcesContent":["module.exports = require('./features');\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","export const CONF = {\n X_FIELD: \"datamations_x\",\n Y_FIELD: \"datamations_y\",\n ORDER_FIELD: \"datamations_order\",\n SCHEME: \"https://vega.github.io/schema/vega-lite/v4.json\",\n};\n\nexport const IGNORE_FIELDS = [\n 'tooltip', 'x', 'y',\n 'datamations_x', 'datamations_y'\n];\n\nexport const META_PARSE_VALUES = {\n grid: \"grid\",\n jitter: \"jitter\",\n};","import { IGNORE_FIELDS } from \"./config.js\";\n\n/**\n * Gets selectors for each componenent, such as slider and animation divs\n * @param {String} id root container id where all the animation components are rendered\n * @returns object of selectors\n */\nexport function getSelectors(id) {\n const base = \"#\" + id;\n\n return {\n axisSelector: base + \" .vega-for-axis\",\n visSelector: base + \" .vega-vis\",\n descr: base + \" .description\",\n slider: base + \" .slider\",\n otherLayers: base + \" .vega-other-layers\",\n controls: base + \" .controls-wrapper\",\n exportWrap: base + \" .export-wrapper\",\n exportBtn: base + \" .export-btn\",\n replayBtn: base + \" .replay-btn\",\n };\n}\n\n/**\n * Splits layers into separate vega-lite specifications, removes layer field\n * @param {Object} input vega-lite specification with layers\n * @returns a list of specs\n */\nexport function splitLayers(input) {\n const specArray = [];\n const spec = input.spec;\n\n if (spec && spec.layer) {\n spec.layer.forEach((d, i) => {\n const obj = JSON.parse(JSON.stringify(input));\n const animated = i === spec.layer.length - 1;\n\n if (obj.meta) {\n obj.meta.animated = animated;\n } else {\n obj.meta = { animated };\n }\n\n obj.spec.encoding = d.encoding;\n obj.spec.mark = d.mark;\n delete obj.spec.layer;\n specArray.push(obj);\n });\n } else if (input.layer) {\n input.layer.forEach((d, i) => {\n const obj = JSON.parse(JSON.stringify(input));\n const animated = i === input.layer.length - 1;\n\n if (obj.meta) {\n obj.meta.animated = animated;\n } else {\n obj.meta = { animated };\n }\n\n obj.encoding = d.encoding;\n obj.mark = d.mark;\n delete obj.layer;\n specArray.push(obj);\n });\n }\n\n return specArray;\n}\n\n/**\n * Looks up a word based of buckets and value.\n * Example:\n * - words: ['a', 'b', 'c']\n * - buckets: [10, 20, 30]\n * - value: 25\n * will return 'c'\n * @param {Array} words list of words\n * @param {Array} buckets list of numbers\n * @param {Number} value score to lookup\n */\nexport function lookupByBucket(words, buckets, value) {\n return words[buckets.findIndex((d) => value <= d)];\n}\n\n/**\n * Finds correct number of rows for grid based on biggest group\n * @param {Array} vegaLiteSpecs an array of vega lite specs\n * @returns a number of rows\n */\nexport function getRows(vegaLiteSpecs) {\n let maxRows = 0;\n\n vegaLiteSpecs\n .filter((d) => d.meta.parse === \"grid\")\n .forEach((spec) => {\n let { width: specWidth, height: specHeight } = spec.spec || spec;\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const splitField = spec.meta.splitField;\n const groupKeys = [];\n\n if (spec.facet) {\n if (spec.facet.column) {\n groupKeys.push(spec.facet.column.field);\n }\n if (spec.facet.row) {\n groupKeys.push(spec.facet.row.field);\n }\n }\n\n let specValues = spec.data.values;\n\n const gap = 2;\n const distance = 4 + gap;\n\n let secondarySplit = Object.keys(encoding).filter((d) => {\n const field = encoding[d].field;\n return (\n field !== splitField &&\n IGNORE_FIELDS.indexOf(d) === -1 &&\n groupKeys.indexOf(field) === -1\n );\n })[0];\n\n // combine groups if secondarySplit\n if (splitField && secondarySplit) {\n const secondaryField = encoding[secondarySplit].field;\n const keys = [...groupKeys, splitField];\n\n const grouped = d3.rollups(\n specValues,\n (arr) => {\n const obj = {};\n let sum = 0;\n\n arr.forEach((x) => {\n sum += x.n;\n obj[x[secondaryField]] = sum;\n });\n\n const o = {\n [splitField]: arr[0][splitField],\n [secondaryField]: obj,\n n: sum,\n };\n\n groupKeys.forEach((x) => {\n o[x] = arr[0][x];\n });\n\n return o;\n },\n ...keys.map((key) => {\n return (d) => d[key];\n })\n );\n\n specValues = grouped.flatMap((d) => {\n if (keys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n\n specWidth = specWidth / grouped.length;\n }\n\n const maxN = d3.max(specValues, (d) => d.n);\n\n let rows = Math.ceil(Math.sqrt(maxN));\n let maxCols = Math.ceil(maxN / rows);\n\n // if horizontal gap is less than 5,\n // then take up all vertical space to increase rows and reduce columns\n if (specWidth / maxCols < 5) {\n rows = Math.floor(specHeight / distance);\n }\n\n if (rows > maxRows) {\n maxRows = rows;\n }\n });\n\n return maxRows;\n}\n","/*\n* Layout generation functions for datamations.\n* Supports:\n* - grid view: meta.parse = \"grid\"\n* - jittered view: meta.parse = \"jitter\"\n*/\nimport { CONF, IGNORE_FIELDS } from \"./config.js\";\nimport { lookupByBucket } from \"./utils.js\";\n\n/**\n * Generates data for grid specs\n * @param {Object} spec vega-lite spec\n * @param {Number} rows number of rows\n * @param {Boolean} stacked if true, circles are stacked and vertically aliged\n * @returns an array of objects\n */\nexport function generateGrid(spec, rows = 10, stacked = false) {\n const splitField = spec.meta.splitField;\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const groupKeys = [];\n\n let {width: specWidth} = spec.spec || spec;\n\n if (spec.facet) {\n if (spec.facet.column) {\n groupKeys.push(spec.facet.column.field);\n spec.facet.column.sort = { \"field\": CONF.ORDER_FIELD };\n }\n if (spec.facet.row) {\n groupKeys.push(spec.facet.row.field);\n spec.facet.row.sort = { \"field\": CONF.ORDER_FIELD };\n }\n }\n\n let specValues = spec.data.values;\n\n const metas = [];\n\n specValues.forEach((d, i) => {\n d[CONF.ORDER_FIELD] = i;\n if (d.meta) {\n metas.push(...Object.keys(d.meta));\n }\n });\n\n let secondarySplit = Object.keys(encoding).filter(d => {\n const field = encoding[d].field;\n return field !== splitField &&\n IGNORE_FIELDS.indexOf(d) === -1 &&\n groupKeys.indexOf(field) === -1 &&\n metas.indexOf(field) === -1;\n })[0];\n\n let secondaryField = null;\n\n // combine groups\n // for example, if splitField = player, but color = hit:\n\n // { \"n\": 5, \"player\": \"a\", \"hit\": \"yes\" },\n // { \"n\": 10, \"player\": \"a\", \"hit\": \"no\" },\n // { \"n\": 15, \"player\": \"b\", \"hit\": \"yes\" },\n // { \"n\": 35, \"player\": \"b\", \"hit\": \"no\" }\n\n // after this code block we will get:\n // { \"n\": 15, \"player\": \"a\", \"hit\": { \"yes\": 5, \"no\": 10 } },\n // { \"n\": 50, \"player\": \"b\", \"hit\": { \"yes\": 15, \"no\": 35 } },\n\n if (splitField && secondarySplit) {\n secondaryField = encoding[secondarySplit].field;\n const keys = [...groupKeys, splitField];\n\n const grouped = d3.rollups(\n specValues,\n arr => {\n const obj = {};\n let sum = 0;\n\n arr.forEach(x => {\n sum += x.n;\n obj[x[secondaryField]] = sum;\n });\n\n const o = {\n [splitField]: arr[0][splitField],\n [secondaryField]: obj,\n n: sum,\n };\n\n groupKeys.forEach(x => {\n o[x] = arr[0][x];\n });\n\n return o;\n },\n ...keys.map((key) => {\n return (d) => d[key];\n })\n );\n\n specValues = grouped.flatMap((d) => {\n if (keys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n\n specWidth = specWidth / grouped.length;\n }\n\n let maxCols = Math.ceil(d3.max(specValues, d => d.n) / rows);\n let splitOptions = [];\n\n if (splitField) {\n splitOptions = Array.from(\n new Set(specValues.map((d) => d[splitField]))\n )\n }\n\n let counter = 1;\n\n const reduce = (v) => {\n const arr = [];\n\n v.forEach((d, j) => {\n const n = d.n;\n const columns = Math.ceil(n / rows);\n const xCenter = splitField ? splitOptions.indexOf(d[splitField]) + 1 : 1;\n\n let startCol = (xCenter - 1) * maxCols + j; // inner grid start\n startCol += Math.floor((maxCols - columns) / 2); // center alignment\n\n const datum = {};\n\n // remove n and gemini_ids, we won't need them any more\n Object.keys(d).forEach(k => {\n if (k !== 'n' && k !== 'gemini_ids') {\n datum[k] = d[k];\n }\n });\n\n for (let i = 0; i < n; i++) {\n const x = startCol + Math.floor(i / rows);\n const y = rows - 1 - i % rows;\n const colorFieldObj = {};\n\n // for secondary split, e.g. is_hit, find correct key and value\n if (secondaryField && typeof[d[secondaryField]] === \"object\") {\n const keys = Object.keys(d[secondaryField]).sort((a, b) => {\n return d[secondaryField][a] - d[secondaryField][b];\n });\n\n colorFieldObj[secondaryField] = lookupByBucket(\n keys,\n keys.map(k => d[secondaryField][k]),\n i + 1,\n );\n }\n\n arr.push({\n ...datum,\n ...colorFieldObj,\n gemini_id: d.gemini_ids ? d.gemini_ids[i] : counter,\n [CONF.X_FIELD]: stacked ? xCenter : x,\n [CONF.Y_FIELD]: stacked ? i + 1 : y,\n });\n\n counter++;\n }\n });\n\n return arr;\n };\n\n let gridValues = [];\n\n if (groupKeys.length === 0) {\n gridValues = reduce(specValues);\n } else {\n gridValues = d3.rollups(\n specValues,\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n )\n .flatMap((d) => {\n if (groupKeys.length === 1) {\n return d[1];\n } else {\n return d[1].flatMap((d) => d[1]);\n }\n });\n }\n\n const num_groups = splitOptions.length;\n\n return {\n gridValues,\n domain: [\n -maxCols / 2,\n (num_groups * maxCols) + (num_groups - 1) + maxCols / 2 - 1\n ],\n num_groups\n };\n}\n\n/**\n * Generates infogrid specification\n * @param {Object} spec vega-lite specification\n * @param {Number} rows number of rows in a grid\n * @returns grid specification\n */\nexport function getGridSpec(spec, rows = 10, stacked = false) {\n return new Promise((res) => {\n const { gridValues: grid, domain, num_groups } = generateGrid(spec, rows, stacked);\n const obj = {...spec};\n const encoding = obj.spec ? obj.spec.encoding : obj.encoding;\n\n const dx = stacked ? 1 : 1;\n\n const xDomain = stacked || num_groups === 0 ? [\n d3.min(grid, d => d[CONF.X_FIELD]) - dx,\n d3.max(grid, d => d[CONF.X_FIELD]) + dx\n ] : domain;\n\n const yPadding = (spec.facet && spec.facet.row) ? 0.8 : 0.4;\n\n const yDomain = [\n stacked ? 0 : d3.min(grid, (d) => d[CONF.Y_FIELD]) - yPadding,\n d3.max(grid, (d) => d[CONF.Y_FIELD]) + yPadding + (stacked ? 10 : 0),\n ];\n\n const middle = yDomain[0] + (yDomain[1] - yDomain[0]) / 2;\n\n obj.data.values = grid;\n\n encoding.x.scale = {\n type: \"linear\",\n domain: xDomain,\n };\n\n encoding.y.scale = {\n type: \"linear\",\n domain: [\n Math.min(yDomain[0], middle - rows / 2),\n Math.max(yDomain[1], middle + rows / 2)\n ],\n };\n\n encoding.x.field = CONF.X_FIELD;\n encoding.y.field = CONF.Y_FIELD;\n\n // set axis labels when splitField\n if (spec.meta.splitField) {\n const labels = Array.from(\n new Set(grid.map(d => d[spec.meta.splitField]))\n );\n\n const expr = {};\n\n labels.forEach((d) => {\n // find min and max x values for each label\n const extent = d3.extent(\n spec.data.values.filter(x => x[spec.meta.splitField] === d),\n d => d[CONF.X_FIELD],\n );\n\n const middle = Math.ceil(extent[0] + (extent[1] - extent[0]) / 2);\n expr[middle] = d;\n });\n\n spec.meta.rules = obj.meta.rules = labels.map(m => {\n return {\n filter: `datum['${spec.meta.splitField}'] === '${m}'`,\n groupKey: spec.meta.splitField,\n groupValue: m,\n }\n });\n\n encoding.x.axis = {\n labelExpr: `${JSON.stringify(expr)}[datum.label]`,\n values: Object.keys(expr).map(d => +d),\n labelAngle: -90,\n grid: false,\n title: spec.meta.splitField,\n };\n }\n\n return res(obj);\n });\n}\n\n/**\n * Generates jittered specification using d3-force\n * @param {Object} spec vega-lite specification\n * @returns jittered spec\n */\nexport function getJitterSpec(spec) {\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n const width = spec.spec ? spec.spec.width : spec.width;\n const nodes = spec.data.values;\n\n const circleRadius = 4;\n\n let innerGroupCount = 1;\n\n if (spec.meta.splitField) {\n innerGroupCount = new Set(\n nodes.map(d => d[spec.meta.splitField])\n ).size;\n }\n\n const facetSize = width ? width : 150;\n const yExtent = d3.extent(nodes, d => d[CONF.Y_FIELD]);\n const xScale = d3.scaleBand()\n .domain(d3.range(1, innerGroupCount + 1))\n .range([0, facetSize])\n .paddingOuter(0.5);\n\n const arr = nodes.slice().filter(d => d[CONF.Y_FIELD] !== undefined).map((d, i) => {\n d.oldX = d[CONF.X_FIELD];\n d.oldY = d[CONF.Y_FIELD];\n\n let x = xScale(d[CONF.X_FIELD]) + xScale.bandwidth() / 2;\n let y = d[CONF.Y_FIELD];\n\n d.scaledX = Math.round(x);\n\n return {\n ...d,\n x: x,\n y: y,\n };\n });\n\n const simulation = d3\n .forceSimulation(arr)\n .force(\"x\", d3.forceX().x(d => d.x))\n .force(\"y\", d3.forceY().strength(0.002).y(d => d[CONF.Y_FIELD]))\n .force(\"collide\", d3\n .forceCollide()\n .strength(0.01)\n .radius(circleRadius)\n )\n .stop();\n\n return new Promise((res) => {\n const bandwidth = xScale.bandwidth() * 0.9;\n\n for (let i = 0; i < 120; i++) {\n simulation.tick();\n\n arr.forEach(d => {\n const x = xScale(d.oldX);\n d.y = d.oldY;\n \n // restrict to the bounds: [5%, 95%] of width\n d.x = Math.max(\n x + xScale.bandwidth() * 0.05,\n Math.min(x + bandwidth, d.x),\n );\n })\n }\n\n if (encoding.y.scale) {\n encoding.y.scale.domain = yExtent\n } else {\n encoding.y.scale = {\n domain: yExtent\n }\n }\n\n encoding.x.scale = {\n domain: [0, facetSize]\n }\n\n // jitter still needs encoding fields to be x and y,\n // because d3-force uses x and y internally.\n encoding.x.field = \"x\";\n encoding.y.field = \"y\";\n\n // if meta.axes is falsy, and we have custom x-axis\n if (!spec.meta.axes && encoding.x.axis && spec.meta.xAxisLabels) {\n const labels = spec.meta.xAxisLabels;\n\n const axisExpr = {};\n const mapped = labels.map((d, i) => {\n const x = Math.round(xScale(i + 1) + xScale.bandwidth() / 2);\n axisExpr[x] = d;\n return { x, label: d };\n });\n\n encoding.x.axis.labelExpr = `${JSON.stringify(axisExpr)}[datum.label]`;\n encoding.x.axis.values = mapped.map(d => d.x);\n }\n\n return res({\n ...spec,\n data: {\n name: \"source\",\n values: arr,\n },\n });\n });\n}","/**\n * Custom animations generation script.\n * Supports:\n * - count\n * - median\n * - mean\n * - quantile\n * - min\n * - max\n * Inspiration from: https://giorgi-ghviniashvili.github.io/aggregate-animation-data/designs/\n */\n\nimport { CONF } from \"./config.js\";\nimport { getGridSpec } from \"./layout.js\";\n\n/**\n * Generates a spec for count animation\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {Object} shrink if truthy, circles will be pulled up\n * @returns a vega lite spec\n */\nexport const getCountStep = (source, target, shrink = false) => {\n const { width, height } = target.spec || target;\n let values = source.data.values.slice();\n const sourceMeta = source.meta;\n\n // generate rules layer\n const rules = sourceMeta.rules.map((d, i) => {\n const n = sourceMeta.rules.length;\n return {\n transform: [{ filter: d.filter }],\n name: `rule-${i + 1}`,\n mark: {\n type: \"rule\",\n x: { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: \"count\",\n // axis: null,\n },\n },\n };\n });\n\n if (shrink) {\n values = values.map((d, i) => {\n const y = target.data.values[i][CONF.Y_FIELD];\n return {\n ...d,\n [CONF.Y_FIELD]: y,\n };\n });\n }\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: source.encoding,\n },\n ...rules,\n ],\n };\n};\n\n/**\n * Generates a spec for median and quantile animations\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {Number} step step counter. null is the last step\n * @param {Number} p a percentile\n * @returns a vega lite spec\n */\nexport const getMedianStep = (source, target, step = 0, p = 0.5) => {\n const all_groups = [];\n const { width, height } = target.spec || target;\n const isLast = step === null;\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n const values = [];\n\n const reduce = (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n\n let sorted = data\n .slice()\n .sort((a, b) => {\n const sortFn = hasFacet ? \"descending\" : \"ascending\";\n return d3[sortFn](a[CONF.Y_FIELD], b[CONF.Y_FIELD]);\n })\n .map((d, i) => {\n return {\n ...d,\n rank: i + 1,\n };\n });\n\n // inspired by median animation https://uwdata.github.io/gemini2-editor/ \n const y_median = d3.quantile(sorted, p, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const y_median_pos = hasFacet ? data[0].scaleY(y_median) : y_median;\n const median_rank = d3.quantile(sorted, 0.5, (d) => d.rank);\n const max_rank = d3.max(sorted, (d) => d.rank);\n const diff = isLast ? null : max_rank - median_rank - step;\n const dx = hasFacet ? 5 : 0.1;\n\n sorted = sorted.map((d) => {\n const rank_delta_abs = Math.abs(d.rank - median_rank);\n const y_delta = (hasFacet ? d.oldY : d[CONF.Y_FIELD]) - y_median;\n const bisection =\n diff !== null && rank_delta_abs <= diff ? 0 : y_delta > 0 ? 1 : -1;\n\n let newField = null;\n\n if (bisection === -1) {\n newField = d[CONF.X_FIELD] - dx;\n } else if (bisection === 1) {\n newField = d[CONF.X_FIELD] + dx;\n } else {\n newField = d[CONF.X_FIELD];\n }\n\n return {\n ...d,\n bisection,\n [CONF.X_FIELD + \"_pos\"]: newField,\n y_median,\n y_median_pos,\n };\n });\n\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue} && datum.bisection === 0`;\n let groupFilter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupFilter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupFilter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupFilter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupFilter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n all_groups.push({\n filter,\n groupFilter,\n groupValue,\n groupKey: CONF.X_FIELD,\n median: y_median,\n groupId,\n median_pos: y_median_pos,\n rankDiff: Math.abs(max_rank - median_rank),\n rule_start: d3.min(sorted, (d) => d[CONF.X_FIELD + \"_pos\"]) + 1,\n rule_end: d3.max(sorted, (d) => d[CONF.X_FIELD + \"_pos\"]) - 1,\n });\n\n values.push(...sorted);\n };\n\n const groupKeys = [CONF.X_FIELD];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n d3.rollup(\n source.data.values.slice(),\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = [];\n\n let ruleField = isLast ? \"y_median\" : CONF.Y_FIELD;\n\n if (hasFacet) {\n ruleField = isLast ? \"y_median_pos\" : CONF.Y_FIELD;\n }\n\n all_groups.forEach((d, i) => {\n const n = all_groups.length;\n\n const top_rule = {\n transform: isLast ? [{ filter: d.groupFilter }] : [{ filter: d.filter }],\n name: `top_rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? d.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: ruleField,\n type: \"quantitative\",\n aggregate: \"max\",\n axis: null,\n },\n },\n };\n\n const bottom_rule = {\n transform: isLast ? [{ filter: d.groupFilter }] : [{ filter: d.filter }],\n name: `bottom_rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? d.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: ruleField,\n type: \"quantitative\",\n aggregate: \"min\",\n axis: null,\n },\n },\n };\n\n rules.push(top_rule, bottom_rule);\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n x: {\n ...source.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n color: source.encoding.color\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Generates a spec for mean animation\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @returns a vega lite spec\n */\nexport const getMeanStep = (source, target) => {\n const all_groups = [];\n const { width, height } = target.spec || target;\n const domain = source.encoding.y.scale.domain;\n\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n\n const values = [];\n\n const reduce = (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n\n let sorted = data\n .slice()\n .sort((a, b) => {\n const sortFn = hasFacet ? \"descending\" : \"ascending\";\n return d3[sortFn](a[CONF.Y_FIELD], b[CONF.Y_FIELD]);\n })\n .map((d, i) => {\n return {\n ...d,\n rank: i + 1,\n };\n });\n\n const y_mean = d3.mean(sorted, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const y_mean_pos = hasFacet ? data[0].scaleY(y_mean) : y_mean;\n const mean_rank = d3.mean(sorted, (d) => d.rank);\n const max_rank = d3.max(sorted, (d) => d.rank);\n const dividor = max_rank * 1.4;\n const multiplier = hasFacet ? 25 : 1;\n\n sorted = sorted.map((d) => {\n const rankRatio_from_mean = (d.rank - mean_rank) / dividor;\n\n const rankRatio_from_mean_start = (d.rank - 0.5 - mean_rank) / dividor;\n const rankRatio_from_mean_end = (d.rank + 0.5 - mean_rank) / dividor;\n\n return {\n ...d,\n [CONF.X_FIELD + \"_pos\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean * multiplier,\n [CONF.X_FIELD + \"_pos_start\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean_start * multiplier,\n [CONF.X_FIELD + \"_pos_end\"]:\n d[CONF.X_FIELD] + rankRatio_from_mean_end * multiplier,\n y_mean,\n y_mean_pos,\n };\n });\n\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n all_groups.push({\n filter,\n groupValue,\n groupKey: CONF.X_FIELD,\n groupId: groupId,\n mean: y_mean,\n mean_pos: y_mean_pos,\n rule_start: d3.min(sorted, (d) => d[CONF.X_FIELD + \"_pos_start\"]),\n rule_end: d3.max(sorted, (d) => d[CONF.X_FIELD + \"_pos_end\"]),\n });\n\n values.push(...sorted);\n\n return sorted;\n };\n\n const groupKeys = [CONF.X_FIELD];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n d3.rollups(\n source.data.values.slice(),\n reduce,\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = [];\n\n all_groups.forEach((d, i) => {\n const n = all_groups.length;\n\n const rule = {\n transform: [{ filter: d.filter }],\n name: `rule_${d.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? d.rule_start\n : {\n expr: `${i + 1} * (width / ${n + 1}) - (width / ${n + 1}) * 0.35`,\n },\n x2: hasFacet\n ? d.rule_end\n : {\n expr: `${i + 1} * (width / ${n + 1}) + (width / ${n + 1}) * 0.35`,\n },\n },\n encoding: {\n y: {\n field: hasFacet ? \"y_mean_pos\" : CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: \"mean\",\n axis: null,\n scale: { domain },\n },\n },\n };\n\n rules.push(rule);\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n x: {\n ...source.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Generates a spec for min and max animations\n * @param {Object} source source spec\n * @param {Object} target target spec\n * @param {String} minOrMax \"min\" or \"max\"\n * @returns a vega lite spec\n */\nexport const getMinMaxStep = (source, target, minOrMax = \"min\") => {\n const { width, height } = target.spec || target;\n const aggrFn = minOrMax === \"min\" ? d3.min : d3.max;\n const domain = source.encoding.y.scale.domain;\n const groupKeys = [CONF.X_FIELD];\n const hasFacet = source.meta.hasFacet;\n const meta = source.meta;\n\n const values = [];\n\n if (hasFacet) {\n if (meta.columnFacet) {\n groupKeys.push(meta.columnFacet.field);\n }\n\n if (meta.rowFacet) {\n groupKeys.push(meta.rowFacet.field);\n }\n }\n\n const all_groups = [];\n\n d3.rollup(\n source.data.values.slice(),\n (data) => {\n const groupValue = data[0][CONF.X_FIELD];\n let filter = `datum['${CONF.X_FIELD}'] === ${groupValue}`;\n let groupId = groupValue;\n\n if (hasFacet) {\n filter += \" && \";\n groupId += \"_\";\n\n if (meta.columnFacet) {\n filter += `datum['${meta.columnFacet.field}'] === '${\n data[0][meta.columnFacet.field]\n }'`;\n groupId += data[0][meta.columnFacet.field];\n }\n\n if (meta.columnFacet && meta.rowFacet) {\n filter += \" && \";\n groupId += \"_\";\n }\n\n if (meta.rowFacet) {\n filter += `datum['${meta.rowFacet.field}'] === '${\n data[0][meta.rowFacet.field]\n }'`;\n groupId += data[0][meta.rowFacet.field];\n }\n }\n\n const aggr = aggrFn(data, (d) => {\n return hasFacet ? d.oldY : d[CONF.Y_FIELD];\n });\n const aggr_pos = hasFacet ? data[0].scaleY(aggr) : aggr;\n\n all_groups.push({\n filter,\n groupValue,\n groupKey: CONF.X_FIELD,\n aggr,\n aggr_pos,\n groupId,\n rule_start: d3.min(data, (d) => d[CONF.X_FIELD] - 2),\n rule_end: d3.max(data, (d) => d[CONF.X_FIELD] + 2),\n });\n\n const g = data.find((d) => {\n const v = hasFacet ? d.oldY : d[CONF.Y_FIELD];\n return v === aggr;\n });\n\n values.push(\n ...data.map((d) => {\n const isAggr = g && g.gemini_id === d.gemini_id;\n\n return {\n ...d,\n isAggr,\n aggr_pos,\n };\n })\n );\n },\n ...groupKeys.map((key) => {\n return (d) => d[key];\n })\n );\n\n const rules = all_groups.map((group, i) => {\n const n = all_groups.length;\n return {\n transform: [{ filter: group.filter }],\n name: `rule_${group.groupId}`,\n mark: {\n type: \"rule\",\n x: hasFacet\n ? group.rule_start\n : { expr: `${i + 1} * (width / ${n + 1}) - 5` },\n x2: hasFacet\n ? group.rule_end\n : { expr: `${i + 1} * (width / ${n + 1}) + 5` },\n },\n encoding: {\n y: {\n field: hasFacet ? \"aggr_pos\" : CONF.Y_FIELD,\n type: \"quantitative\",\n aggregate: minOrMax,\n axis: null,\n scale: { domain },\n },\n },\n };\n });\n\n return {\n $schema: CONF.SCHEME,\n width,\n height,\n meta: {\n all_groups,\n },\n data: {\n name: \"source\",\n values: values,\n },\n layer: [\n {\n name: \"main\",\n mark: source.mark,\n encoding: {\n ...source.encoding,\n },\n },\n ...rules,\n ],\n resolve: { axis: { y: \"independent\" } },\n };\n};\n\n/**\n * Configuration for custom animations.\n * When meta.custom_animation is present, \n * it looks up a function here and generates custom animation specifications\n */\nexport const CustomAnimations = {\n /**\n * steps:\n * 1) stack sets\n * 2) put rules (lines) using aggregate count\n * 3) replace with count bubbles (aggregate count) (basically target spec)\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n count: async (rawSource, target) => {\n const stacks = await getGridSpec(rawSource, 10, true);\n delete stacks.encoding.y.axis;\n const rules = getCountStep(rawSource, target, false);\n const pullUp = getCountStep(rawSource, target, true);\n return [stacks, rules, pullUp, target];\n },\n /**\n * min animation steps:\n * 1) source spec\n * 2) stack sets, with a rule line at min circle\n * 3) pull circles down\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n min: (rawSource, target) => {\n const step_1 = getMinMaxStep(rawSource, target, \"min\");\n\n const step_2 = {\n ...step_1,\n transform: [{ filter: \"datum.isAggr === true\" }],\n layer: [\n {\n ...step_1.layer[0],\n encoding: {\n ...step_1.layer[0].encoding,\n y: {\n ...step_1.layer[0].encoding.y,\n aggregate: \"min\",\n },\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n\n return [rawSource, step_1, step_2, target];\n },\n /**\n * max animation steps:\n * 1) source spec\n * 2) stack sets, with a rule line at max circle\n * 3) pull circles up\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n max: (rawSource, target, source) => {\n const step_1 = getMinMaxStep(rawSource, target, \"max\");\n\n const step_2 = {\n ...step_1,\n transform: [{ filter: \"datum.isAggr === true\" }],\n layer: [\n {\n ...step_1.layer[0],\n encoding: {\n ...step_1.layer[0].encoding,\n y: {\n ...step_1.layer[0].encoding.y,\n aggregate: \"max\",\n },\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n\n return [rawSource, step_1, step_2, target];\n },\n /**\n * mean animation steps:\n * 1) source spec\n * 2) intermediate: circles will be placed diagonally \"/\" \n * 3) add lines (rules) at mean level\n * 4) convert circles to small ticks\n * 5) show vertical lines\n * 6) collapse the lines to mean level\n * 7) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n mean: (rawSource, target) => {\n const step_1 = getMeanStep(rawSource, target);\n\n const barWidth = 2;\n\n const step_2 = {\n ...step_1,\n layer: [\n {\n name: \"main\",\n mark: { type: \"tick\", orient: \"horizontal\", width: barWidth },\n encoding: {\n y: {\n ...rawSource.encoding.y,\n },\n x: {\n ...rawSource.encoding.x,\n field: CONF.X_FIELD + \"_pos_start\",\n },\n x2: {\n field: CONF.X_FIELD + \"_pos_end\",\n },\n color: rawSource.encoding.color\n },\n },\n ...step_1.layer.slice(1),\n ],\n };\n const step_3 = {\n ...step_2,\n layer: [\n {\n ...step_2.layer[0],\n mark: {\n type: \"bar\",\n width: barWidth,\n },\n encoding: {\n ...step_2.layer[0].encoding,\n y2: {\n field: \"y_mean_pos\",\n },\n },\n },\n ...step_2.layer.slice(1),\n ],\n };\n const step_4 = {\n ...step_2,\n layer: [\n {\n ...step_2.layer[0],\n mark: {\n type: \"bar\",\n width: barWidth,\n },\n encoding: {\n ...step_2.layer[0].encoding,\n y: {\n ...step_2.layer[0].encoding.y,\n field: \"y_mean_pos\",\n },\n y2: {\n field: \"y_mean_pos\",\n },\n },\n },\n ...step_2.layer.slice(1),\n ],\n };\n\n const intermediate = {\n ...rawSource,\n data: {\n values: step_1.data.values,\n },\n encoding: {\n ...rawSource.encoding,\n x: {\n ...rawSource.encoding.x,\n field: CONF.X_FIELD + \"_pos\",\n },\n },\n };\n\n return [rawSource, intermediate, step_1, step_2, step_3, step_4, target];\n },\n /**\n * median and quantile animation steps:\n * 1) source spec\n * 2) show rules at the top and bottom\n * 3) split circles by median and move to the right and left and move rules to median level\n * 4) target spec\n * @param {Object} rawSource source spec\n * @param {Object} target target spec\n * @returns an array of vega-lite specs\n */\n median: (rawSource, target, calculatedSource, p) => {\n const percent = (p === undefined || p === null) ? 0.5 : p;\n const initial = getMedianStep(rawSource, target, 0, percent);\n const last_with_points = getMedianStep(rawSource, target, null, percent);\n\n return [\n rawSource,\n initial,\n last_with_points,\n target\n ];\n },\n};\n","/**\n * Hack faceted view since gemini.js does not support multi view animations\n * Finding coordinates of each circle and treat them as real values in the one axis view \n * Adding axis layer underneath to look exactly same as faceted view\n */\n\nimport { CONF, META_PARSE_VALUES } from \"./config.js\";\n\n/**\n * Get empty spec, if no data is present\n * @param {Object} spec \n * @returns vega-lite spec\n */\nexport function getEmptySpec(spec) {\n const description = spec.meta.description;\n const splitField = spec.meta.splitField;\n\n return {\n $scheme: CONF.SCHEME,\n width: 300,\n height: 300,\n meta: {\n description,\n axes: false,\n },\n data: {\n values: [\n {\n [CONF.X_FIELD]: 0,\n [CONF.Y_FIELD]: 0,\n },\n ],\n },\n mark: {\n type: \"point\",\n filled: true,\n strokeWidth: 1,\n color: \"transparent\",\n },\n encoding: {\n x: {\n field: CONF.X_FIELD,\n type: \"quantitative\",\n scale: {\n domain: [-5, 5],\n },\n axis: {\n grid: false,\n ticks: false,\n title: splitField,\n domain: false,\n values: [],\n },\n },\n y: {\n field: CONF.Y_FIELD,\n type: \"quantitative\",\n scale: {\n domain: [-5, 5],\n },\n axis: {\n grid: false,\n ticks: false,\n title: null,\n domain: false,\n values: [],\n },\n },\n },\n };\n}\n\n/**\n * Creates and returns a template for vega spec\n * @param {Number} width spec width\n * @param {Number} height spec height\n * @param {Object} axes which axes to add\n * @param {Object} spec original spec\n * @returns vega-lite spec\n */\nexport function getSpecTemplate(width, height, axes = { x: true, y: true }, spec) {\n const encoding = spec.spec.encoding;\n const mark = spec.spec.mark;\n const facet = spec.facet;\n\n if (encoding.x) {\n const title = facet && facet.column ? facet.column.title : null;\n\n encoding.x = {\n field: CONF.X_FIELD,\n type: \"quantitative\",\n scale: {},\n axis: axes.x\n ? {\n labelExpr: \"\",\n values: [],\n title: title,\n grid: false,\n orient: \"top\",\n ticks: false,\n domain: false,\n labelPadding: 10,\n }\n : null,\n };\n }\n\n if (encoding.y) {\n const title = facet && facet.row ? facet.row.title : null;\n\n encoding.y = {\n field: spec.spec.mark === \"errorbar\" ? encoding.y.field : CONF.Y_FIELD,\n type: \"quantitative\",\n scale: {},\n axis: axes.y\n ? {\n labelExpr: \"\",\n values: [],\n title: title,\n grid: false,\n labelAngle: 90,\n domain: false,\n ticks: false,\n labelPadding: 10,\n orient: \"right\",\n }\n : null,\n };\n }\n\n const additionals = {};\n\n if (spec.transform) {\n additionals.transform = spec.transform;\n }\n\n return {\n $schema: CONF.SCHEME,\n data: {\n values: [],\n },\n width: width,\n height: height,\n mark: mark,\n encoding: encoding,\n ...additionals,\n };\n}\n\n/**\n * Get hacked spec\n * Finding coordinates of each circle and treat them as real values in the one axis view \n * Adding axis layer underneath to look exactly same as faceted view\n * @param {Object} param0 parameters\n * @param {Object} param0.view a vega view instance\n * @param {Object} param0.spec a vega spec\n * @param {Object} param0.width spec width\n * @param {Object} param0.height spec height\n * @returns vega-lite spec\n */\nexport function getHackedSpec({ view, spec, width = 600, height = 600 }) {\n const rowId = spec.facet.row ? spec.facet.row.field : null;\n const colId = spec.facet.column ? spec.facet.column.field : null;\n\n const newSpec = getSpecTemplate(\n width,\n height,\n {\n x: colId,\n y: rowId,\n },\n spec\n );\n\n const yDomain = [height, 0];\n const xDomain = [0, width];\n\n const values = [];\n\n const colMap = new Map();\n const rowMap = new Map();\n\n const scaleX = view.scale(\"x\");\n const scaleY = view.scale(\"y\");\n const source = view.data(\"source\");\n\n let row_header, column_header;\n\n // y axis\n if (rowId && (row_header = view.data(\"row_header\"))) {\n const yAxisValues = [];\n const yAxisExpr = {};\n\n row_header.forEach((d, i) => {\n const bounds = d.bounds;\n const name = d.datum[rowId];\n const y1 = bounds.y1;\n const y2 = bounds.y2;\n\n rowMap.set(name, y1);\n\n const yCoord = Math.round(y1 + (y2 - y1) / 2);\n\n yAxisValues.push(yCoord);\n yAxisExpr[yCoord] = name;\n });\n\n yDomain[1] = d3.min(row_header, (d) => d.bounds.y1);\n yDomain[0] = d3.max(row_header, (d) => d.bounds.y2);\n\n newSpec.encoding.y.axis.values = yAxisValues;\n newSpec.encoding.y.axis.labelExpr = `${JSON.stringify(\n yAxisExpr\n )}[datum.label]`;\n }\n\n // x axis\n if (colId && (column_header = view.data(\"column_header\"))) {\n const xAxisValues = [];\n const xAxisExpr = {};\n\n column_header.forEach((d, i) => {\n const bounds = d.bounds;\n\n const name = d.datum[colId];\n colMap.set(name, bounds.x1);\n\n const xCoord = Math.round(bounds.x1 + (bounds.x2 - bounds.x1) / 2);\n\n xAxisValues.push(xCoord);\n xAxisExpr[xCoord] = name;\n });\n\n xDomain[0] = d3.min(column_header, (d) => d.bounds.x1);\n xDomain[1] = d3.max(column_header, (d) => d.bounds.x2);\n\n newSpec.encoding.x.axis.values = xAxisValues;\n newSpec.encoding.x.axis.labelExpr = `${JSON.stringify(\n xAxisExpr\n )}[datum.label]`;\n }\n\n // generating data.values\n source.forEach((d) => {\n const col = d[colId];\n const row = d[rowId];\n\n const xStart = colMap.get(col) || 0;\n const yStart = rowMap.get(row) || 0;\n\n const xField = spec.meta.parse === META_PARSE_VALUES.jitter ? \"x\" : CONF.X_FIELD;\n const yField = spec.meta.parse === META_PARSE_VALUES.jitter ? \"y\" : CONF.Y_FIELD;\n\n const xCoord = xStart + scaleX(d[xField]);\n\n values.push({\n ...d,\n [CONF.X_FIELD]: xCoord,\n [CONF.Y_FIELD]: yStart + scaleY(d[yField]),\n [CONF.X_FIELD + \"_num\"]: d.scaledX ? xStart + scaleX(d.scaledX) : xCoord,\n scaleX: (val) => yStart + scaleX(val),\n scaleY: (val) => yStart + scaleY(val),\n });\n });\n\n newSpec.encoding.x.scale.domain = xDomain;\n newSpec.encoding.y.scale.domain = yDomain;\n newSpec.data.values = values;\n newSpec.width = xDomain[1] - xDomain[0];\n newSpec.height = yDomain[0] - yDomain[1];\n\n return newSpec;\n}\n\n/**\n * turns faceted spec to regular spec, using hacking technique\n * @param {Object} spec vega lite spec with facets\n * @returns vega-lite spec\n */\nexport function hackFacet(spec) {\n const div = document.createElement(\"div\");\n\n spec.data.name = \"source\";\n\n return vegaEmbed(div, spec, { renderer: \"svg\" }).then((resp) => {\n const newSpec = getHackedSpec({\n ...resp,\n width: spec.spec.width,\n height: spec.spec.height,\n });\n\n if (spec.config) {\n newSpec.config = spec.config;\n }\n\n if (spec.meta) {\n newSpec.meta = spec.meta;\n }\n\n let [transformX, transformY] = resp.view._origin;\n\n if (!(spec.facet && spec.facet.row && !spec.facet.column)) {\n transformY = 0;\n }\n\n if (newSpec.meta) {\n newSpec.meta.transformX = transformX;\n newSpec.meta.transformY = transformY;\n } else {\n newSpec.meta = { transformX, transformY };\n }\n\n return newSpec;\n });\n}\n","/**\n * Entry point of Datamations JavaScript code\n * Reads vega-lite specifications, converts to vega specs and animates them\n *\n * ### Dependencies:\n * - gemini: https://github.com/uwdata/gemini\n * - vega-lite: https://vega.github.io/vega-lite/\n * - vega: https://vega.github.io/vega/\n * - vega-embed: https://github.com/vega/vega-embed\n * - d3: https://d3js.org/\n * - gifshot: https://github.com/yahoo/gifshot\n * - html2canvas: https://html2canvas.hertzen.com/\n * - download2: http://danml.com/download.html\n */\n\nimport { CONF, META_PARSE_VALUES } from \"./config.js\";\nimport { getSelectors, splitLayers, getRows } from \"./utils.js\";\nimport { hackFacet, getEmptySpec } from \"./hack-facet-view.js\";\nimport { getGridSpec, getJitterSpec } from \"./layout.js\";\nimport { CustomAnimations } from \"./custom-animations.js\";\n\n/**\n *\n * @param {String} id conteiner id\n * @param {Object} param1 configuration object\n * @param {Array} param1.specs list of vega-lite specifications\n * @param {Boolean} param1.autoPlay autoPlay\n * @param {Number} param1.frameDel frame duration (in ms.)\n * @param {Number} param1.frameDel delay between frames (in ms.)\n * @returns an object of exposed functions\n */\nexport default function App(id, { specs, autoPlay = false, frameDur, frameDel }) {\n let rawSpecsImmutable; // saving passed specs here, not changed by reference\n let rawSpecs; // holds raw vega-lite specs, not transformed\n let vegaLiteSpecs;\n let vegaSpecs; // vega specs\n let frames;\n let metas;\n let frameIndex = 0;\n let timeoutId;\n let playing = false;\n let initializing = false;\n let frameDuration = frameDur || 2000;\n let frameDelay = frameDel || 1000;\n\n // a fallback gemini spec in case gemini.animate could not recommend anything\n const gemSpec = {\n timeline: {\n concat: [\n {\n sync: [\n {\n component: {\n mark: \"marks\",\n },\n change: {\n data: {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: false,\n },\n encode: {\n update: true,\n enter: true,\n exit: true,\n },\n },\n timing: {\n duration: {\n ratio: 1,\n },\n },\n },\n ],\n },\n ],\n },\n totalDuration: frameDuration,\n };\n\n /**\n * Resets all the instance variables to be able to re-run animation\n */\n const reset = () => {\n vegaLiteSpecs = [];\n vegaSpecs = [];\n rawSpecs = [];\n rawSpecsImmutable = [];\n frames = [];\n metas = [];\n frameIndex = 0;\n playing = false;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n /**\n * Initializes datamation app\n */\n async function init() {\n // ignore all subsequent init calls.\n if (initializing) return;\n initializing = true;\n\n const { slider } = getSelectors(id);\n\n reset();\n\n // load or set data\n if (specs) {\n vegaLiteSpecs = JSON.parse(JSON.stringify(specs));\n }\n\n // save raw specs to use for facet axes drawing\n vegaLiteSpecs.forEach((d) => {\n rawSpecs.push(JSON.parse(JSON.stringify(d)));\n rawSpecsImmutable.push(JSON.parse(JSON.stringify(d)));\n\n if (d.meta) {\n metas.push(d.meta);\n }\n });\n\n d3.select(slider).property(\"max\", vegaLiteSpecs.length - 1);\n\n // parse, jitter, layer splitting\n await transformSpecs();\n\n // compile to vega\n toVegaSpecs();\n\n // create frames for animation\n await makeFrames();\n\n drawSpec(0);\n\n if (autoPlay) {\n setTimeout(play, 100);\n }\n\n initializing = false;\n }\n\n /**\n * Plays animation\n */\n function play(cb = () => {}) {\n playing = true;\n frameIndex = 0;\n\n const tick = () => {\n animateFrame(frameIndex, cb).then(() => {\n if (playing) {\n frameIndex++; // next frame\n\n if (frames[frameIndex]) {\n tick();\n } else {\n playing = false;\n disableEnable(\"enable\");\n }\n }\n });\n\n if (typeof HTMLWidgets !== \"undefined\" && HTMLWidgets.shinyMode) {\n var prevIndex = frameIndex - 1;\n Shiny.onInputChange(\"slider_state\", prevIndex);\n }\n };\n\n disableEnable(\"disable\");\n tick();\n }\n\n /**\n * Draws vega lite spec statically (without transition), also updates slider, description, show/hides some layers\n * @param {Number} index specification index in vegaLiteSpecs\n * @param {Object} vegaSpec source vega spec of current frame\n * @returns a promise of vegaEmbed\n */\n function drawSpec(index, vegaSpec) {\n let spec = vegaLiteSpecs[index];\n\n if (!spec) return;\n\n if (spec.custom) {\n spec = gemini.vl2vg4gemini(spec.sequence[spec.sequence.length - 1]);\n }\n\n const meta = metas[index];\n\n const {\n axisSelector,\n visSelector,\n descr,\n slider,\n otherLayers,\n controls,\n exportWrap,\n } = getSelectors(id);\n\n d3.select(slider).property(\"value\", index);\n d3.select(descr).html(meta.description || \"frame \" + index);\n d3.select(axisSelector)\n .style(\"opacity\", meta.axes ? 1 : 0)\n .html(\"\");\n d3.select(visSelector).classed(\"with-axes\", meta.axes);\n d3.select(otherLayers).classed(\"with-axes\", meta.axes);\n\n // draw axis\n if (meta.axes) {\n drawAxis(index);\n }\n\n const transformX = meta.transformX || 0;\n const transformY = meta.transformY || 0;\n\n // shift vis\n d3.select(visSelector)\n .style(\"left\", transformX + \"px\")\n .style(\"top\", transformY + \"px\");\n\n const _width = spec.width + transformX + 10;\n d3.select(controls).style(\"width\", _width + \"px\");\n d3.select(descr).style(\"width\", _width + \"px\");\n\n // draw vis\n return drawChart(spec, vegaSpec && vegaSpec.custom ? null : vegaSpec);\n }\n\n /**\n * Draws a chart, either spec or vegaSpec (which is passed from animate function)\n * Supports single view as well as multiple view chart\n * @param {Object} spec vega-lite spec\n * @param {Object} vegaSpec source vega spec of current frame\n * @returns a promise of vegaEmbed\n */\n function drawChart(spec, vegaSpec) {\n const { visSelector, otherLayers } = getSelectors(id);\n const layers = document.querySelector(otherLayers);\n layers.innerHTML = \"\";\n\n if (Array.isArray(spec)) {\n return new Promise((res) => {\n spec.forEach((s, i) => {\n let target,\n embedSpec = s;\n\n if (s.meta.animated) {\n target = visSelector;\n if (vegaSpec) {\n embedSpec = vegaSpec;\n }\n } else {\n const div = document.createElement(\"div\");\n div.classList.add(\"vega-hidden-layer\");\n layers.appendChild(div);\n target = div;\n }\n\n vegaEmbed(target, embedSpec, { renderer: \"svg\" }).then(() => {\n if (i === spec.length - 1) {\n res();\n }\n\n // ensure facet translations match in axisSelector and otherLayers\n setTimeout(() => {\n adjustAxisAndErrorbars();\n }, 100);\n });\n });\n });\n } else {\n return vegaEmbed(visSelector, vegaSpec || spec, { renderer: \"svg\" });\n }\n }\n\n /**\n * Fixes hacked axis spec and error bar alignment\n */\n function adjustAxisAndErrorbars() {\n const { axisSelector, otherLayers } = getSelectors(id);\n const axisCells = d3\n .select(axisSelector)\n .selectAll(\".mark-group.cell>g\")\n .nodes();\n const otherLayersCells = d3\n .select(otherLayers)\n .selectAll(\".mark-group.cell>g\")\n .nodes();\n\n if (axisCells.length === otherLayersCells.length) {\n for (let i = 0; i < axisCells.length; i++) {\n const transform = axisCells[i].getAttribute(\"transform\");\n otherLayersCells[i].setAttribute(\"transform\", transform);\n }\n }\n }\n\n /**\n * Draws an axis layer. This is called when meta.axes = true.\n * @param {Number} index specification index in vegaLiteSpecs\n * @returns a promise of vegaEmbed\n */\n function drawAxis(index) {\n let spec = rawSpecs[index];\n\n if (spec.spec && spec.spec.layer) {\n const split = splitLayers(spec);\n spec = split[1];\n }\n\n const columnFacet = spec.facet && spec.facet.column;\n const { axisSelector, controls, descr, otherLayers } = getSelectors(id);\n\n // update axis domain to matched hacked facet view\n const encoding = spec.spec ? spec.spec.encoding : spec.encoding;\n\n if (!encoding.y.scale) {\n const extentY = d3.extent(spec.data.values, (d) => d[CONF.Y_FIELD]);\n encoding.y.scale = { domain: extentY };\n }\n\n if (encoding.color) {\n encoding.color.legend = null;\n }\n\n if (encoding.fill) {\n encoding.fill.legend = null;\n }\n\n if (encoding.x && encoding.x.axis) {\n encoding.x.axis.labelAngle = -90;\n encoding.x.axis.titleOpacity = 0;\n }\n\n return vegaEmbed(axisSelector, spec, { renderer: \"svg\" }).then(() => {\n if (columnFacet && columnFacet.title) {\n const fn = function () {\n const transform = d3.select(this).attr(\"transform\");\n const x = transform.split(\"(\")[1].split(\",\")[0];\n return `translate(${x}, 40)`;\n };\n\n d3.select(axisSelector + \" svg > g\").attr(\"transform\", fn);\n d3.select(otherLayers + \" svg > g\").attr(\"transform\", fn);\n }\n const width = d3\n .select(axisSelector)\n .node()\n .getBoundingClientRect().width;\n d3.select(controls).style(\"width\", width + \"px\");\n d3.select(descr).style(\"width\", width + \"px\");\n });\n }\n\n /**\n * Animates a frame, from source to target vega specification using gemini\n * @param {Number} index specification index in vegaLiteSpecs\n * @param {Function} cb callback function of each frame drawal\n * @returns a promise of gemini.animate\n */\n async function animateFrame(index, cb) {\n if (!frames[index]) return;\n\n console.log(\"animating frame\", index);\n\n const { axisSelector, visSelector, otherLayers, descr, slider, controls } =\n getSelectors(id);\n\n let { source, target, gemSpec, prevMeta, currMeta } = frames[index];\n let anim = null;\n\n if (source.custom) {\n const _source_spec = gemini.vl2vg4gemini(\n source.sequence[source.sequence.length - 1]\n );\n anim = await gemini.animate(_source_spec, target, gemSpec);\n } else if (target.custom) {\n anim = await gemini.animateSequence(target.sequence, gemSpec);\n } else {\n anim = await gemini.animate(source, target, gemSpec);\n }\n\n let currHasAxes = currMeta.axes;\n let width = target.width;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n // initial frame\n if (index === 0 && cb) cb(0);\n\n return new Promise((res) => {\n drawSpec(index, source).then(() => {\n timeoutId = setTimeout(() => {\n d3.select(descr).html(currMeta.description);\n anim.play(visSelector).then(() => {\n d3.select(slider).property(\"value\", index + 1);\n cb && cb(index + 1);\n res();\n });\n\n const transformX = currMeta.transformX || 0;\n const transformY = currMeta.transformY || 0;\n\n d3.select(visSelector)\n .transition()\n .duration(750)\n .style(\"left\", transformX + \"px\")\n .style(\"top\", transformY + \"px\");\n\n // show/hide axis vega chart\n if (currHasAxes) {\n drawAxis(index + 1);\n d3.select(axisSelector)\n .transition()\n .duration(1000)\n .style(\"opacity\", 1);\n d3.select(visSelector).classed(\"with-axes\", true);\n d3.select(otherLayers).classed(\"with-axes\", true);\n } else {\n d3.select(axisSelector)\n .transition()\n .duration(1000)\n .style(\"opacity\", 0);\n d3.select(visSelector).classed(\"with-axes\", false);\n d3.select(otherLayers).classed(\"with-axes\", false);\n d3.select(controls).style(\"width\", width + transformX + 10 + \"px\");\n d3.select(descr).style(\"width\", width + transformX + 10 + \"px\");\n }\n\n const nextSpec = vegaLiteSpecs[index + 1];\n\n if (nextSpec && Array.isArray(nextSpec)) {\n const statics = nextSpec.filter((d) => !d.meta.animated);\n\n d3.select(otherLayers)\n .html(\"\")\n .style(\"opacity\", 0)\n .transition()\n // .delay(frameDuration / 3)\n .duration(frameDuration / 2)\n .style(\"opacity\", 1);\n\n statics.forEach((s) => {\n const div = document.createElement(\"div\");\n div.classList.add(\"vega-hidden-layer\");\n vegaEmbed(div, s, { renderer: \"svg\" }).then(() => {\n adjustAxisAndErrorbars();\n });\n document.querySelector(otherLayers).appendChild(div);\n });\n } \n }, \n // removed delay between frames for custom animations\n target.custom ? 0 : frameDelay);\n });\n });\n }\n\n /**\n * Transforms specifications into proper format:\n * - meta.grid = generates infogrid\n * - meta.jitter = jitters data using d3.forceCollide\n * - meta.custom_animation = handles custom animation type\n * - spec.layer = splits layers to stack on top on each other\n */\n async function transformSpecs() {\n const rows = getRows(vegaLiteSpecs);\n\n for (let i = 0; i < vegaLiteSpecs.length; i++) {\n let vlSpec = vegaLiteSpecs[i];\n\n if (Array.isArray(vlSpec)) continue; // just sanity check, making sure that it is not an array\n\n // if filter has empty `oneOf`, then generate empty spec and avoid any further processing\n if (\n vlSpec.transform &&\n vlSpec.transform[0].filter &&\n vlSpec.transform[0].filter.oneOf &&\n vlSpec.transform[0].filter.oneOf.length === 0\n ) {\n const emptySpec = getEmptySpec(vlSpec);\n\n metas[i] = emptySpec.meta;\n rawSpecs[i] = emptySpec;\n vlSpec = emptySpec;\n vegaLiteSpecs[i] = emptySpec;\n continue;\n }\n\n const meta = vlSpec.meta;\n const parse = meta.parse;\n\n // parsing\n\n if (meta.custom_animation) {\n let funName = meta.custom_animation;\n let p = null;\n\n // handle quantile\n if (\n Array.isArray(meta.custom_animation) &&\n meta.custom_animation[0] === \"quantile\"\n ) {\n p = meta.custom_animation[1];\n funName = \"median\";\n }\n\n let source = {\n ...rawSpecs[i - 1],\n data: rawSpecsImmutable[i - 1].data,\n };\n let target = vlSpec;\n\n if (rawSpecsImmutable[i - 1].facet) {\n source = {\n ...vegaLiteSpecs[i - 1],\n meta: {\n ...vegaLiteSpecs[i - 1].meta,\n hasFacet: true,\n columnFacet: rawSpecsImmutable[i - 1].facet.column,\n rowFacet: rawSpecsImmutable[i - 1].facet.row,\n },\n data: {\n values: vegaLiteSpecs[i - 1].data.values.map((d) => {\n return {\n ...d,\n [CONF.X_FIELD]: d[CONF.X_FIELD + \"_num\"],\n };\n }),\n },\n };\n }\n\n // if custom animations have facets, fake them before passing to CustomAnimation\n if (vegaLiteSpecs[i].facet) {\n const newSpecTarget = await hackFacet(vegaLiteSpecs[i]);\n vegaLiteSpecs[i] = newSpecTarget;\n target = newSpecTarget;\n }\n\n const fn = CustomAnimations[funName];\n\n if (fn) {\n const sequence = await fn(source, target, vegaLiteSpecs[i - 1], p);\n vegaLiteSpecs[i] = {\n custom: meta.custom_animation,\n sequence,\n };\n }\n } else if (parse === META_PARSE_VALUES.grid) {\n const gridSpec = await getGridSpec(vlSpec, rows);\n\n const enc = gridSpec.spec ? gridSpec.spec.encoding : gridSpec.encoding;\n rawSpecs[i].data.values = gridSpec.data.values;\n\n // update domain for raw spec axis layer\n if (rawSpecs[i].meta.axes && rawSpecs[i].meta.splitField) {\n const encoding = rawSpecs[i].spec\n ? rawSpecs[i].spec.encoding\n : rawSpecs[i].encoding;\n\n encoding.x.axis = enc.x.axis;\n encoding.y.scale = {\n domain: enc.y.scale.domain,\n };\n encoding.x.scale = {\n domain: enc.x.scale.domain,\n };\n }\n\n vegaLiteSpecs[i] = gridSpec;\n } \n else if (parse === META_PARSE_VALUES.jitter) {\n vegaLiteSpecs[i] = await getJitterSpec(vlSpec);\n } \n // since gemini does not support multiple multiple axis transitions, \n // we must split the layers and draw as separate vega spec\n else if (vlSpec.layer || (vlSpec.spec && vlSpec.spec.layer)) {\n const arr = splitLayers(vlSpec);\n\n vegaLiteSpecs[i] = [];\n\n for (let j = 0; j < arr.length; j++) {\n const s = arr[j];\n\n // fake facets\n if (s.facet && s.spec && s.meta.animated) {\n const newSpec = await hackFacet(s);\n vegaLiteSpecs[i].push(newSpec);\n metas[i] = newSpec.meta;\n } else {\n vegaLiteSpecs[i].push(s);\n }\n }\n }\n\n if (vegaLiteSpecs[i]) {\n const facet = vegaLiteSpecs[i].facet;\n const spec = vegaLiteSpecs[i].spec;\n\n // fake facets\n if (facet && spec) {\n const newSpec = await hackFacet(vegaLiteSpecs[i]);\n vegaLiteSpecs[i] = newSpec;\n }\n }\n }\n\n console.log(\"parsed specs:\", vegaLiteSpecs);\n }\n\n /**\n * Converts vega-lite specs to vega specs using vl2vg4gemini (https://github.com/uwdata/gemini#vl2vg4gemini)\n */\n function toVegaSpecs() {\n vegaSpecs = vegaLiteSpecs.map((d) => {\n if (d.custom) {\n return d;\n }\n\n const s = Array.isArray(d) ? d.find((d) => d.meta.animated) : d;\n return gemini.vl2vg4gemini(s);\n });\n }\n\n /**\n * Generates animation frames\n * @returns array of objects of \\{ source, target, gemSpec, prevMeta, currMeta \\}\n */\n async function makeFrames() {\n const options = {\n stageN: 1,\n\n scales: {\n x: {\n domainDimension: \"diff\",\n },\n y: {\n domainDimension: \"diff\",\n },\n },\n\n marks: {\n marks: {\n change: {\n scale: [\"x\", \"y\"],\n data: {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: true,\n },\n encode: {\n update: true,\n enter: true,\n exit: true,\n },\n },\n },\n },\n totalDuration: frameDuration,\n };\n\n for (let i = 1; i < vegaSpecs.length; i++) {\n const prev = vegaSpecs[i - 1];\n const curr = vegaSpecs[i];\n\n const prevMeta = metas[i - 1];\n const currMeta = metas[i];\n\n try {\n let resp = null;\n\n if (curr.custom) {\n resp = await gemini.recommendForSeq(curr.sequence, {\n ...options,\n stageN: curr.sequence.length - 1,\n totalDuration: frameDuration * 2,\n });\n\n const _gemSpec = resp[0].specs.map((d) => d.spec);\n\n // make sure to add gemini_id to data change.\n // gemini recommend does not add it by itself.\n _gemSpec.forEach((d) => {\n if (d.timeline.concat.length) {\n const first = d.timeline.concat[0].sync[0];\n if (first && first.change && first.change.data) {\n first.change.data = {\n keys: [\"gemini_id\"],\n update: true,\n enter: true,\n exit: true,\n };\n }\n }\n });\n\n frames.push({\n source: prev,\n target: curr,\n gemSpec: _gemSpec,\n prevMeta,\n currMeta,\n });\n } else {\n resp = await gemini.recommend(\n prev.custom\n ? gemini.vl2vg4gemini(prev.sequence[prev.sequence.length - 1])\n : prev,\n curr,\n options\n );\n\n const _gemSpec = resp[0] ? resp[0].spec : gemSpec;\n const sync = _gemSpec.timeline.concat[0].sync;\n\n if (!sync.some((d) => d.component === \"view\")) {\n sync.push({\n component: \"view\",\n change: {\n signal: [\"width\", \"height\"],\n },\n timing: {\n duration: {\n ratio: 1,\n },\n },\n });\n }\n\n frames.push({\n source: prev,\n target: curr,\n gemSpec: _gemSpec,\n prevMeta,\n currMeta,\n });\n }\n } catch (error) {\n console.error(error);\n }\n }\n }\n\n /**\n * Slider on change callback\n */\n function onSlide() {\n playing = false;\n disableEnable(\"enable\");\n const { slider } = getSelectors(id);\n const index = document.querySelector(slider).value;\n drawSpec(index);\n }\n\n /**\n * Exports png files for each frame\n */\n function exportPNG() {\n const { exportWrap } = getSelectors(id);\n\n const pngs = [];\n\n const callback = (index) => {\n const done = index >= frames.length;\n\n html2canvas(document.querySelector(exportWrap)).then((canvas) => {\n pngs.push(canvas.toDataURL());\n\n if (done) {\n pngs.forEach((uri, i) => {\n var a = document.createElement(\"a\");\n a.href = uri;\n a.download = `frame-${i + 1}.png`;\n a.click();\n });\n }\n });\n };\n\n play(callback);\n }\n\n /**\n * Exports datamation as gif.\n * @param {Boolean} fromWeb truthy if it is called from webpage, falsy from command line tool\n * @returns either base64 string, or downloads .gif file\n */\n function exportGif(fromWeb) {\n const { exportWrap, exportBtn } = getSelectors(id);\n\n if (fromWeb) {\n loaderOnOff(true);\n disableEnable(\"disable\", { slider: true });\n }\n\n let intervalId,\n images = [];\n\n const startInterval = () => {\n if (intervalId) clearInterval(intervalId);\n\n intervalId = setInterval(() => {\n html2canvas(document.querySelector(exportWrap)).then((canvas) => {\n images.push(canvas.toDataURL());\n });\n }, 16.66666);\n };\n\n let maxWidth = 300;\n let maxHeight = 300;\n\n return new Promise((res) => {\n const callback = (index) => {\n const done = index >= frames.length;\n const bound = document\n .querySelector(exportWrap)\n .getBoundingClientRect();\n\n if (bound.width > maxWidth) maxWidth = bound.width;\n if (bound.height > maxHeight) maxHeight = bound.height;\n\n if (done) {\n intervalId && clearInterval(intervalId);\n\n setTimeout(() => {\n gifshot.createGIF(\n {\n images,\n gifWidth: maxWidth,\n gifHeight: maxHeight,\n frameDuration: 2.5,\n },\n function (obj) {\n if (fromWeb) {\n loaderOnOff(false);\n disableEnable(\"enable\", { slider: true });\n }\n\n if (!obj.error) {\n var image = obj.image;\n\n if (fromWeb) {\n download(image, \"animation.gif\", \"image/gif\");\n }\n res(image);\n } else {\n console.error(\"error creating gif\", obj.errorMsg);\n }\n }\n );\n }, 1000);\n } else {\n intervalId && clearInterval(intervalId);\n setTimeout(startInterval, frameDelay);\n }\n };\n\n play(callback);\n });\n }\n\n /**\n * Disables or enables some components\n * @param {String} cmd \"disable\" or \"enable\"\n * @param {Array} components array of components\n */\n function disableEnable(cmd, components) {\n const { replayBtn, exportBtn, slider } = getSelectors(id);\n const arr = [replayBtn, exportBtn];\n\n if (components && components.slider) {\n arr.push(slider);\n }\n\n arr.forEach((sel) => {\n const el = document.querySelector(sel);\n\n if (cmd == \"disable\") {\n el.setAttribute(\"disabled\", \"disabled\");\n } else {\n el.removeAttribute(\"disabled\");\n }\n });\n }\n\n /**\n * Download button icon adjustment\n * @param {Boolean} loading\n */\n function loaderOnOff(loading) {\n const { exportBtn } = getSelectors(id);\n let className = \"fas fa-download\";\n\n if (loading) {\n className = \"fas fa-spinner spin\";\n }\n\n d3.select(exportBtn).select(\"i\").attr(\"class\", className);\n }\n\n init();\n\n return {\n onSlide,\n play,\n exportPNG,\n exportGif,\n animateFrame,\n getFrames: () => frames,\n };\n}\n"],"names":["undefined"],"mappings":"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"}
\ No newline at end of file
diff --git a/inst/htmlwidgets/js/src/scripts/app.js b/inst/htmlwidgets/js/src/scripts/app.js
index 224d3180..0f06fd4e 100644
--- a/inst/htmlwidgets/js/src/scripts/app.js
+++ b/inst/htmlwidgets/js/src/scripts/app.js
@@ -13,11 +13,11 @@
* - download2: http://danml.com/download.html
*/
-import { CONF, META_PARSE_VALUES } from "./config";
-import { getSelectors, splitLayers, getRows } from "./utils";
-import { hackFacet, getEmptySpec } from "./hack-facet-view";
-import { getGridSpec, getJitterSpec } from "./layout";
-import { CustomAnimations } from "./custom-animations";
+import { CONF, META_PARSE_VALUES } from "./config.js";
+import { getSelectors, splitLayers, getRows } from "./utils.js";
+import { hackFacet, getEmptySpec } from "./hack-facet-view.js";
+import { getGridSpec, getJitterSpec } from "./layout.js";
+import { CustomAnimations } from "./custom-animations.js";
/**
*
diff --git a/inst/htmlwidgets/js/src/scripts/custom-animations.js b/inst/htmlwidgets/js/src/scripts/custom-animations.js
index 45de0194..b4c9be46 100644
--- a/inst/htmlwidgets/js/src/scripts/custom-animations.js
+++ b/inst/htmlwidgets/js/src/scripts/custom-animations.js
@@ -10,8 +10,8 @@
* Inspiration from: https://giorgi-ghviniashvili.github.io/aggregate-animation-data/designs/
*/
-import { CONF } from "./config";
-import { getGridSpec } from "./layout";
+import { CONF } from "./config.js";
+import { getGridSpec } from "./layout.js";
/**
* Generates a spec for count animation
diff --git a/inst/htmlwidgets/js/src/scripts/hack-facet-view.js b/inst/htmlwidgets/js/src/scripts/hack-facet-view.js
index 27fc2e24..271daeb3 100644
--- a/inst/htmlwidgets/js/src/scripts/hack-facet-view.js
+++ b/inst/htmlwidgets/js/src/scripts/hack-facet-view.js
@@ -4,7 +4,7 @@
* Adding axis layer underneath to look exactly same as faceted view
*/
-import { CONF, META_PARSE_VALUES } from "./config";
+import { CONF, META_PARSE_VALUES } from "./config.js";
/**
* Get empty spec, if no data is present
diff --git a/inst/htmlwidgets/js/src/scripts/layout.js b/inst/htmlwidgets/js/src/scripts/layout.js
index 46602601..e2c9d621 100644
--- a/inst/htmlwidgets/js/src/scripts/layout.js
+++ b/inst/htmlwidgets/js/src/scripts/layout.js
@@ -4,8 +4,8 @@
* - grid view: meta.parse = "grid"
* - jittered view: meta.parse = "jitter"
*/
-import { CONF, IGNORE_FIELDS } from "./config";
-import { lookupByBucket } from "./utils";
+import { CONF, IGNORE_FIELDS } from "./config.js";
+import { lookupByBucket } from "./utils.js";
/**
* Generates data for grid specs
diff --git a/inst/htmlwidgets/js/src/scripts/utils.js b/inst/htmlwidgets/js/src/scripts/utils.js
index e991b4e1..6379cefc 100644
--- a/inst/htmlwidgets/js/src/scripts/utils.js
+++ b/inst/htmlwidgets/js/src/scripts/utils.js
@@ -1,4 +1,4 @@
-import { IGNORE_FIELDS } from "./config";
+import { IGNORE_FIELDS } from "./config.js";
/**
* Gets selectors for each componenent, such as slider and animation divs
diff --git a/inst/htmlwidgets/js/src/test/test.js b/inst/htmlwidgets/js/src/test/test.js
index 2e019c88..866b3601 100644
--- a/inst/htmlwidgets/js/src/test/test.js
+++ b/inst/htmlwidgets/js/src/test/test.js
@@ -1,6 +1,6 @@
import assert from 'assert';
-import { generateGrid, getGridSpec, getJitterSpec } from "../dist/esm/index.js";
import * as d3 from "d3";
+import { generateGrid } from "../scripts/layout.js";
// set d3 globally. The functions expect d3 to be globally set
global.d3 = d3;